简体   繁体   中英

Uploading multiple image on php server from android

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());
    }
}

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;
        }

    }


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!';
    }
}

查看我将多张图像发送到服务器的信息, 点击此处

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM