How to Upload Multiple files in one request along with other string parameters in android?

Hello everyone,

I have shown two methods to upload files in android.
In today’s tutorial I will show another simple method to upload files. With this method you can upload multiple files in one request + you can send your own string parameters with them.

These are the things to do after creating the project.
1. You have to include two libraries in the your project build path(Download these libraries from here apache-mime4j-0.6.jar and httpmime-4.0.1.jar).
2. Add these libraries to the project build path.
3. Here you can see the the other things you need to remember while connecting to a server.

Refer the image

Note : I am working here on the local system as server. So I have used the server domain name as 10.0.2.2. Please change this according to your need.

OK Now open your main java file and copy this code into it.

package pack.coderzheaven;
 
import java.io.File;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
 
public class FileUploadTest extends Activity {
 
      private static final int SELECT_FILE1 = 1 ;
      private static final int SELECT_FILE2 = 2 ;
      String selectedPath1 = "NONE" ;
      String selectedPath2 = "NONE" ;
      TextView tv, res;
      ProgressDialog progressDialog;
      Button b1,b2,b3;
      HttpEntity resEntity;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.main);
 
         tv = (TextView)findViewById(R.id.tv);
         res = (TextView)findViewById(R.id.res);
         tv.setText(tv.getText() + selectedPath1 + "," + selectedPath2);
         b1 = (Button)findViewById(R.id.Button01);
         b2 = (Button)findViewById(R.id.Button02);
         b3 = (Button)findViewById(R.id.upload);
         b1.setOnClickListener( new OnClickListener() {
                @Override
                public void onClick(View v) {
                     openGallery(SELECT_FILE1);
                }
           });
         b2.setOnClickListener( new OnClickListener() {
                @Override
                public void onClick(View v) {
                     openGallery(SELECT_FILE2);
                }
           });
         b3.setOnClickListener( new OnClickListener() {
                @Override
                public void onClick(View v) {
                     if (!(selectedPath1.trim().equalsIgnoreCase( "NONE" )) && !(selectedPath2.trim().equalsIgnoreCase( "NONE" ))){
                          progressDialog = ProgressDialog.show(FileUploadTest. this , "" , "Uploading files to server....." , false );
                           Thread thread= new Thread( new Runnable(){
                                  public void run(){
                                         doFileUpload();
                                      runOnUiThread( new Runnable(){
                                          public void run() {
                                              if (progressDialog.isShowing())
                                                   progressDialog.dismiss();
                                          }
                                      });
                                  }
                        });
                        thread.start();
                     } else {
                               Toast.makeText(getApplicationContext(), "Please select two files to upload." , Toast.LENGTH_SHORT).show();
                     }
              }
           });
 
     }
 
     public void openGallery( int req_code){
 
           Intent intent = new Intent();
         intent.setType( "image/*" );
         intent.setAction(Intent.ACTION_GET_CONTENT);
         startActivityForResult(Intent.createChooser(intent, "Select file to upload " ), req_code);
    }
 
    public void onActivityResult( int requestCode, int resultCode, Intent data) {
 
          if (resultCode == RESULT_OK) {
           Uri selectedImageUri = data.getData();
              if (requestCode == SELECT_FILE1)
              {
                  selectedPath1 = getPath(selectedImageUri);
                System.out.println( "selectedPath1 : " + selectedPath1);
              }
              if (requestCode == SELECT_FILE2)
              {
                  selectedPath2 = getPath(selectedImageUri);
                System.out.println( "selectedPath2 : " + selectedPath2);
              }
              tv.setText( "Selected File paths : " + selectedPath1 + "," + selectedPath2);
          }
      }
 
     public String getPath(Uri uri) {
          String[] projection = { MediaStore.Images.Media.DATA };
          Cursor cursor = managedQuery(uri, projection, null , null , null );
          int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
          cursor.moveToFirst();
          return cursor.getString(column_index);
      }
 
     private void doFileUpload(){
 
      File file1 = new File(selectedPath1);
      File file2 = new File(selectedPath2);
         String urlString = "http://10.0.2.2/upload_test/upload_media_test.php" ;
         try
         {
            HttpClient client = new DefaultHttpClient();
              HttpPost post = new HttpPost(urlString);
               FileBody bin1 = new FileBody(file1);
               FileBody bin2 = new FileBody(file2);
               MultipartEntity reqEntity = new MultipartEntity();
               reqEntity.addPart( "uploadedfile1" , bin1);
               reqEntity.addPart( "uploadedfile2" , bin2);
               reqEntity.addPart( "user" , new StringBody( "User" ));
               post.setEntity(reqEntity);
               HttpResponse response = client.execute(post);
               resEntity = response.getEntity();
               final String response_str = EntityUtils.toString(resEntity);
               if (resEntity != null ) {
                   Log.i( "RESPONSE" ,response_str);
                 runOnUiThread( new Runnable(){
                           public void run() {
                                try {
                                    res.setTextColor(Color.GREEN);
                                         res.setText( "n Response from server : n " + response_str);
                                         Toast.makeText(getApplicationContext(), "Upload Complete. Check the server uploads directory." , Toast.LENGTH_LONG).show();
                                    } catch (Exception e) {
                                         e.printStackTrace();
                                    }
                              }
                       });
               }
         }
         catch (Exception ex){
              Log.e( "Debug" , "error: " + ex.getMessage(), ex);
         }
       }
}

Now the layout for this file main.xml

<? xml version = "1.0" encoding = "utf-8" ?>
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
     android:orientation = "vertical"
     android:layout_width = "fill_parent"
     android:layout_height = "fill_parent"
     >
< TextView
     android:layout_width = "fill_parent"
     android:layout_height = "wrap_content"
     android:text = "Multiple File Upload from CoderzHeaven"
     />
< Button
     android:id = "@+id/Button01"
     android:layout_width = "wrap_content"
     android:layout_height = "wrap_content"
     android:text = "Get First File" >
</ Button >
< Button
     android:id = "@+id/Button02"
     android:layout_width = "wrap_content"
     android:layout_height = "wrap_content"
     android:text = "Get Second File" >
</ Button >
< Button
     android:id = "@+id/upload"
     android:layout_width = "wrap_content"
     android:layout_height = "wrap_content"
     android:text = "Start Upload" >
</ Button >
< TextView
      android:id = "@+id/tv"
     android:layout_width = "fill_parent"
     android:layout_height = "wrap_content"
     android:text = "Selected File path : "
     />
 
< TextView
      android:id = "@+id/res"
    android:layout_width = "fill_parent"
    android:layout_height = "wrap_content"
    android:text = ""
    />
</ LinearLayout >
1
 
< strong >Now the AndroidManifest file(Remember to add the permission for accessing internet)</ strong >
1
<? xml version = "1.0" encoding = "utf-8" ?>
< manifest xmlns:android = "http://schemas.android.com/apk/res/android"
       package = "pack.coderzheaven"
       android:versionCode = "1"
       android:versionName = "1.0" >
 
       < uses-permission android:name = "android.permission.INTERNET" />
 
     < application android:icon = "@drawable/icon" android:label = "@string/app_name" >
         < activity android:name = ".FileUploadTest"
                   android:label = "@string/app_name" >
             < intent-filter >
                 < action android:name = "android.intent.action.MAIN" />
                 < category android:name = "android.intent.category.LAUNCHER" />
             </ intent-filter >
         </ activity >
     </ application >
</ manifest >

Now the server side(Here it is written in PHP)
upload_media_test.php file contents

<?php
$target_path1 = "uploads/" ;
$target_path2 = "uploads/" ;
/* Add the original filename to our target path.
Result is "uploads/filename.extension" */
$target_path1 = $target_path1 . basename ( $_FILES [ 'uploadedfile1' ][ 'name' ]);
if (move_uploaded_file( $_FILES [ 'uploadedfile1' ][ 'tmp_name' ], $target_path1 )) {
     echo "The first file " basename ( $_FILES [ 'uploadedfile1' ][ 'name' ]).
     " has been uploaded." ;
} else {
     echo "There was an error uploading the file, please try again!" ;
     echo "filename: " basename ( $_FILES [ 'uploadedfile1' ][ 'name' ]);
     echo "target_path: " . $target_path1 ;
}
 
$target_path2 = $target_path2 . basename ( $_FILES [ 'uploadedfile2' ][ 'name' ]);
if (move_uploaded_file( $_FILES [ 'uploadedfile2' ][ 'tmp_name' ], $target_path2 )) {
     echo "n The second file " basename ( $_FILES [ 'uploadedfile2' ][ 'name' ]).
     " has been uploaded." ;
} else {
     echo "There was an error uploading the file, please try again!" ;
     echo "filename: " basename ( $_FILES [ 'uploadedfile2' ][ 'name' ]);
     echo "target_path2: " . $target_path2 ;
}
 
$user = $_REQUEST [ 'user' ];
echo "n String Parameter send from client side : " . $user ;
?>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值