3

Help for this specific server side php code I don't have any knowledge of php and I have to upload three images from android to this php page.

I have tried many methods and searched for it but no tutorial or anything didn't help me my android code is working properly. DNS also configured but images aren't shown at the server side. Please help me with java code.

PHP:

<?php
if ($_FILES["file1"]["error"] > 0)
{
    header("HTTP/1.1 400 Bad Request");
    echo "Error: " . $_FILES["file1"]["error"] . "<br />";
}
else if ($_FILES["file2"]["error"] > 0)
{
    header("HTTP/1.1 400 Bad Request");
    echo "Error: " . $_FILES["file1"]["error"] . "<br />";
}
else if ($_FILES["file3"]["error"] > 0)
{
    header("HTTP/1.1 400 Bad Request");
    echo "Error: " . $_FILES["file1"]["error"] . "<br />";
}
else
{
    if ($_FILES["file1"]["error"] > 0)
    {
        echo "Error: " . $_FILES["file1"]["error"] . "<br />";
    }
    else
    {
        echo "Upload: " . $_FILES["file1"]["name"] . "<br />";
        echo "Type: " . $_FILES["file1"]["type"] . "<br />";
        echo "Size: " . ($_FILES["file1"]["size"] / 1024) . " Kb<br />";
        echo "Stored in: " . $_FILES["file1"]["tmp_name"]. "<br />";
    }

    //$target_path = "uploads/";
    $target_path = "elp/pendingimages/";

    $target_path = $target_path . basename( $_FILES['file1']['name']); 

    if(move_uploaded_file($_FILES['file1']['tmp_name'], $target_path)) {
        echo "The file ".  basename( $_FILES['file1']['name']). 
            " has been uploaded"; 
    } 
    else{
        echo "There was an error uploading the file, please try again!";
    }

    if ($_FILES["file2"]["error"] > 0)
    {
        echo "Error: " . $_FILES["file2"]["error"] . "<br />";
    }
    else
    {
        echo "Upload: " . $_FILES["file2"]["name"] . "<br />";
        echo "Type: " . $_FILES["file2"]["type"] . "<br />";
        echo "Size: " . ($_FILES["file2"]["size"] / 1024) . " Kb<br />";
        echo "Stored in: " . $_FILES["file2"]["tmp_name"]. "<br />";
    }

    //$target_path = "uploads/";
    $target_path = "elp/pendingimages/";

    $target_path = $target_path . basename( $_FILES['file2']['name']); 

    if(move_uploaded_file($_FILES['file2']['tmp_name'], $target_path)) {
        echo "The file ".  basename( $_FILES['file2']['name']). 
        " has been uploaded";
    } 
    else{
        echo "There was an error uploading the file, please try again!";
    }

    if ($_FILES["file3"]["error"] > 0)
    {
        echo "Error: " . $_FILES["file3"]["error"] . "<br />";
    }
    else
    {
        echo "Upload: " . $_FILES["file3"]["name"] . "<br />";
        echo "Type: " . $_FILES["file3"]["type"] . "<br />";
        echo "Size: " . ($_FILES["file3"]["size"] / 1024) . " Kb<br />";
        echo "Stored in: " . $_FILES["file3"]["tmp_name"]. "<br />";
    }


    //$target_path = "uploads/";
    $target_path = "elp/pendingimages/";

    $target_path = $target_path . basename( $_FILES['file3']['name']);  

    if(move_uploaded_file($_FILES['file3']['tmp_name'], $target_path)) {
        echo "The file ".  basename( $_FILES['file3']['name']). 
            " has been uploaded";
    } 
    else{
        echo "There was an error uploading the file, please try again!";
    }
}

?>

Java:

public class TryprojectActivity extends Activity {
    InputStream is;
    int pic_count = 0;
    Bitmap bitmap=null;
    FileInputStream in1,in2,in3;
    BufferedInputStream buf;

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.main);

        try {
            in1 = new FileInputStream("/sdcard/1.jpg");
        } 
        catch (FileNotFoundException e2) {
        // TODO Auto-generated catch block
            e2.printStackTrace();
        }

        try {
            in2 = new FileInputStream("/sdcard/2.jpg");
        } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } 

    try {
        in3 = new FileInputStream("/sdcard/3.jpg");
    } 
    catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } 

    Bitmap bitmapOrg1 = BitmapFactory.decodeStream(in1);
    ByteArrayOutputStream bao1 = new ByteArrayOutputStream();
    bitmapOrg1.compress(Bitmap.CompressFormat.JPEG, 90, bao1);
    byte [] imagearray1 = bao1.toByteArray();
    String ba1=Base64.encode(imagearray1);

    Bitmap bitmapOrg2 = BitmapFactory.decodeStream(in2);
    ByteArrayOutputStream bao2 = new ByteArrayOutputStream();
    bitmapOrg2.compress(Bitmap.CompressFormat.JPEG, 90, bao2);
    byte [] imagearray2 = bao2.toByteArray();
    String ba2=Base64.encode(imagearray2);

    Bitmap bitmapOrg3 = BitmapFactory.decodeStream(in3);
    ByteArrayOutputStream bao3 = new ByteArrayOutputStream();
    bitmapOrg3.compress(Bitmap.CompressFormat.JPEG, 90, bao3);
    byte [] imagearray3 = bao3.toByteArray();
    String ba3=Base64.encode(imagearray3);

    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);

    nameValuePairs.add(new BasicNameValuePair("image1",ba1));
    nameValuePairs.add(new BasicNameValuePair("image2",ba2));
    nameValuePairs.add(new BasicNameValuePair("image3",ba3));

    try{
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://helpdesk.cispl.com/upload_file.php");
        UrlEncodedFormEntity obj = new UrlEncodedFormEntity(nameValuePairs);
        obj.setChunked(true);
        httppost.setEntity(obj);
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        //is = entity.getContent();
        httpclient.getConnectionManager().shutdown(); 
    }
    catch(Exception e){
        //CommonFunctions.writeLOG(ctx.getClass().toString(), e.toString());
        //CommonFunctions.showToast(ctx, "Unable to post captured image file: " +
        //e.toString());
    }
}
afuzzyllama
  • 6,538
  • 5
  • 47
  • 64
user1160020
  • 234
  • 1
  • 2
  • 7
  • Those images has to be uploaded through HTTP, how to you do your upload? (Since you mentioned Java) – greut Jan 20 '12 at 11:53
  • I mean the java Activity code required in the android app. And I have tired to upload using http and mulitpart too but no use. This is may be happening cause I ma trying to code without knowing about php. – user1160020 Jan 20 '12 at 12:01
  • @user1160020, php code is correct. So, don't blame your php knowledge. Looks like there a errors in your multipart request. – Dmitry Zaytsev Jan 20 '12 at 12:04
  • I have tried with multipart too but currently my doing with this code and there's no error in the code or else :S – user1160020 Jan 20 '12 at 12:44
  • @user1160020 Is your problem solved? Can you please let me know the solution? Your code in question seems exactly same as mine. – Korhan Jan 28 '13 at 15:30

3 Answers3

2

Looks like your PHP is correct.

On your device use HTTP POST request with MultipartEntity data type. Read more here

EDIT

Example from my link:

You will have to download additional libraries to get MultipartEntity running!

1) Download httpcomponents-client-4.1.zip from http://james.apache.org/download.cgi#Apache_Mime4J and add apache-mime4j-0.6.1.jar to your project.

2) Download httpcomponents-client-4.1-bin.zip from http://hc.apache.org/downloads.cgi and add httpclient-4.1.jar, httpcore-4.1.jar and httpmime-4.1.jar to your project.

3) Use the example code below.



    private DefaultHttpClient mHttpClient;


    public ServerCommunication() {
        HttpParams params = new BasicHttpParams();
        params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
        mHttpClient = new DefaultHttpClient(params);
    }


    public void uploadUserPhoto(File image1, File image2, File image3) {

        try {

            HttpPost httppost = new HttpPost("some url");

            MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);  
            multipartEntity.addPart("Title", new StringBody("Title"));
            multipartEntity.addPart("Nick", new StringBody("Nick"));
            multipartEntity.addPart("Email", new StringBody("Email"));
            multipartEntity.addPart("Description", new StringBody(Settings.SHARE.TEXT));
            multipartEntity.addPart("file1", new FileBody(image1));
            multipartEntity.addPart("file2", new FileBody(image2));
            multipartEntity.addPart("file3", new FileBody(image3));
            httppost.setEntity(multipartEntity);

            mHttpClient.execute(httppost, new PhotoUploadResponseHandler());

        } catch (Exception e) {
            Log.e(ServerCommunication.class.getName(), e.getLocalizedMessage(), e);
        }
    }

    private class PhotoUploadResponseHandler implements ResponseHandler {

        @Override
        public Object handleResponse(HttpResponse response)
                throws ClientProtocolException, IOException {

            HttpEntity r_entity = response.getEntity();
            String responseString = EntityUtils.toString(r_entity);
            Log.d("UPLOAD", responseString);

            return null;
        }

    }



Community
  • 1
  • 1
Dmitry Zaytsev
  • 23,650
  • 14
  • 92
  • 146
  • I am converting my all three images to the byteArray and then adding it into the list. What I have to do after that??? Or I am going in wrong way? – user1160020 Jan 20 '12 at 12:11
  • in1 = new FileInputStream("/sdcard/1.jpg"); Bitmap bitmapOrg1 = BitmapFactory.decodeStream(in1); ByteArrayOutputStream bao1 = new ByteArrayOutputStream(); bitmapOrg1.compress(Bitmap.CompressFormat.JPEG, 90, bao1); byte [] imagearray1 = bao1.toByteArray(); String ba1=Base64.encode(imagearray1); This is I am doing for all three images – user1160020 Jan 20 '12 at 12:12
  • Looks at my example. With this approach MultipartEntity will do everything for you. You just need to create FileBody from your File (and create File from your image). – Dmitry Zaytsev Jan 20 '12 at 12:14
  • reqEntity.addpart(); error at this command configure path... Even I have given the apache and http jar path – user1160020 Jan 20 '12 at 12:24
  • The type org.apache.james.mime4j.message.SingleBody cannot be resolved. It is indirectly referenced from required .class files – user1160020 Jan 20 '12 at 12:30
  • @DmitryZaitsev Can you please answer [my question](http://stackoverflow.com/questions/14567050/uploading-multiple-images-to-server) which discusses on similar problem? But I have images data in Bitmaps. – Korhan Jan 29 '13 at 03:25
1

First of all your code could be optimized to the following:

$files = array('file1', 'file2', 'file3');
$path = 'elp/pendingimages/';

foreach ($files as $file) {
    if ($_FILES[$file]['error'] > 0) {
        echo 'Error: '. $_FILES[$file]['error'] .'<br />';
    }
    else {
        echo 'Upload: '. $_FILES[$file]['name'] .'<br />';
        echo 'Type: '. $_FILES[$file]['type'] .'<br />';
        echo 'Size: '. ($_FILES[$file]['size'] / 1024) .' Kb<br />';
        echo 'Stored in: '. $_FILES[$file]['tmp_name'] .'<br />';
    }

    $basename = basename($_FILES[$file]['name']);

    if (move_uploaded_file($_FILES[$file]['tmp_name'], $path . $basename) {
        echo "The file {$basename} has been uploaded";
    }
    else {
        echo 'There was an error uploading the file, please try again!';
    }
}

If you're using different field for each file then it's fine.

Next you can see what $_FILES array store in itself when it's multiple upload:

$_FILES = array(
    ['files'] => array(
        ['name'] => array(
            [0] => 'WALL_video.jpg'
            [1] => 'WALLc.jpg'
        )
        ['type'] => array(
            [0] => 'image/jpeg'
            [1] => 'image/jpeg'
        )
        ['tmp_name'] => array(
            [0] => '/tmp/phpnbKcdM'
            [1] => '/tmp/phpnrHSN1'
        )
        ['error'] => array(
            [0] => 0
            [1] => 0
        )
        ['size'] => array(
            [0] => 885968
            [1] => 839713
        )
    )
)

The following code will work for you if you're using one field with name like files[] as array of files.

$target_path = 'elp/pendingimages/';

foreach ($_FILES['files']['name'] as $index => $name) {
    if ($_FILES['files']['error'][$index] > 0) {
        echo 'Error: ' . $_FILES['files']['error'][$index] . '<br />';
    }
    else {
        echo 'Upload: '. $_FILES['files']['name'][$index] .'<br />';
        echo 'Type: '. $_FILES['files']['type'][$index] .'<br />';
        echo 'Size: '. ($_FILES['files']['size'][$index] / 1024) .' Kb<br />';
        echo 'Stored in: '. $_FILES['files']['tmp_name'][$index] .'<br />';
    }

    $path = $target_path . basename($name);

    if (move_uploaded_file($_FILES['files']['tmp_name'][$index], $path) {
        echo "The file {$name} has been uploaded";
    }
    else {
        echo 'There was an error uploading the file, please try again!';
    }
}
Vlad Stratulat
  • 1,296
  • 1
  • 10
  • 24
0

Check my post on sending multiple images to server Click here