title: Uploading file in php server from android device
body: <p>I am trying to upload file to a php server from my android device but  server is not receiving any file. here is my sample code, I found  it on-line.
  php server , I am uploading a file through chunk</p>
  
  <p><strong>My Android code</strong></p>
  
  <pre><code>import java.io.DataOutputStream;
  import java.io.File;
  import java.io.FileInputStream;
  import java.net.HttpURLConnection;
  import java.net.MalformedURLException;
  import java.net.URL;
  import android.app.Activity;
  import android.app.ProgressDialog;
  import android.content.Intent;
  import android.database.Cursor;
  import android.graphics.Bitmap;
  import android.graphics.BitmapFactory;
  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.ImageView;
  import android.widget.TextView;
  import android.widget.Toast;
  
  public class MainActivity extends Activity implements OnClickListener{
  
  private TextView messageText;
  private Button uploadButton, btnselectpic;
  private ImageView imageview;
  private int serverResponseCode = 0;
  private ProgressDialog dialog = null;
  
  private String upLoadServerUri = null;
  private String imagepath=null;
  @Override
  public void onCreate(Bundle savedInstanceState) {
  
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
  
      uploadButton = (Button)findViewById(R.id.uploadButton);
      messageText  = (TextView)findViewById(R.id.messageText);
      btnselectpic = (Button)findViewById(R.id.button_selectpic);
      imageview = (ImageView)findViewById(R.id.imageView_pic);
  
      btnselectpic.setOnClickListener(this);
      uploadButton.setOnClickListener(this);
      upLoadServerUri = "http://192.168.2.4/fileupload/UploadToServer.php";
  }
  
  
  @Override
  public void onClick(View arg0) {
      if(arg0==btnselectpic)
      {
          Intent intent = new Intent();
          intent.setType("image/*");
          intent.setAction(Intent.ACTION_GET_CONTENT);
          startActivityForResult(Intent.createChooser(intent, "Complete action using"), 1);
      }
      else if (arg0==uploadButton) {
  
           dialog = ProgressDialog.show(MainActivity.this, "", "Uploading file...", true);
           messageText.setText("uploading started.....");
           new Thread(new Runnable() {
               public void run() {
  
                    uploadFile(imagepath);
  
               }
             }).start();     
      }
  
  } 
  
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  
      if (requestCode == 1 &amp;&amp; resultCode == RESULT_OK) {
          //Bitmap photo = (Bitmap) data.getData().getPath(); 
  
          Uri selectedImageUri = data.getData();
          imagepath = getPath(selectedImageUri);
          Bitmap bitmap=BitmapFactory.decodeFile(imagepath);
          imageview.setImageBitmap(bitmap);
          messageText.setText("Uploading file path:" +imagepath);
  
      }
  }
       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);
          }
  
  public int uploadFile(String sourceFileUri) {
  
  
        String fileName = sourceFileUri;
  
        HttpURLConnection conn = null;
        DataOutputStream dos = null;  
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****";
        int bytesRead, bytesAvailable, bufferSize;
        byte[] buffer;
        int maxBufferSize = 1 * 1024 * 1024; 
        File sourceFile = new File(sourceFileUri); 
  
        if (!sourceFile.isFile()) {
  
             dialog.dismiss(); 
  
             Log.e("uploadFile", "Source File not exist :"+imagepath);
  
             runOnUiThread(new Runnable() {
                 public void run() {
                     messageText.setText("Source File not exist :"+ imagepath);
                 }
             }); 
  
             return 0;
  
        }
        else
        {
             try { 
  
                   // open a URL connection to the Servlet
                 FileInputStream fileInputStream = new FileInputStream(sourceFile);
                 URL url = new URL(upLoadServerUri);
  
                 // Open a HTTP  connection to  the URL
                 conn = (HttpURLConnection) url.openConnection(); 
                 conn.setDoInput(true); // Allow Inputs
                 conn.setDoOutput(true); // Allow Outputs
                 conn.setUseCaches(false); // Don't use a Cached Copy
                 conn.setRequestMethod("POST");
                 conn.setRequestProperty("Connection", "Keep-Alive");
                 conn.setRequestProperty("ENCTYPE", "multipart/form-data");
                 conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
                 conn.setRequestProperty("file", fileName); 
  
                 dos = new DataOutputStream(conn.getOutputStream());
  
                 dos.writeBytes(twoHyphens + boundary + lineEnd); 
                 dos.writeBytes("Content-Disposition: form-data; name=\"file\";file\""
                                           + fileName + "\"" + lineEnd);
  
                 dos.writeBytes(lineEnd);
  
                 // create a buffer of  maximum size
                 bytesAvailable = fileInputStream.available(); 
  
                 bufferSize = Math.min(bytesAvailable, maxBufferSize);
                 buffer = new byte[bufferSize];
  
                 // read file and write it into form...
                 bytesRead = fileInputStream.read(buffer, 0, bufferSize);  
  
                 while (bytesRead &gt; 0) {
  
                   dos.write(buffer, 0, bufferSize);
                   bytesAvailable = fileInputStream.available();
                   bufferSize = Math.min(bytesAvailable, maxBufferSize);
                   bytesRead = fileInputStream.read(buffer, 0, bufferSize);   
  
                  }
  
                 // send multipart form data necesssary after file data...
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
  
                 // Responses from the server (code and message)
                 serverResponseCode = conn.getResponseCode();
                 String serverResponseMessage = conn.getResponseMessage();
  
                 Log.i("uploadFile", "HTTP Response is : "
                         + serverResponseMessage + ": " + serverResponseCode);
  
                 if(serverResponseCode == 200){
  
                     runOnUiThread(new Runnable() {
                          public void run() {
                              String msg = "File Upload Completed.\n\n See uploaded file here : \n\n"
                                    +" c:/xamp/htdocs/file upload/uploads";
                              messageText.setText(msg);
                              Toast.makeText(MainActivity.this, "File Upload Complete.", Toast.LENGTH_SHORT).show();
                          }
                      });                
                 }    
  
                 //close the streams //
                 fileInputStream.close();
                 dos.flush();
                 dos.close();
  
            } catch (MalformedURLException ex) {
  
                dialog.dismiss();  
                ex.printStackTrace();
  
                runOnUiThread(new Runnable() {
                    public void run() {
                        messageText.setText("MalformedURLException Exception : check script url.");
                        Toast.makeText(MainActivity.this, "MalformedURLException", Toast.LENGTH_SHORT).show();
                    }
                });
  
                Log.e("Upload file to server", "error: " + ex.getMessage(), ex);  
            } catch (Exception e) {
  
                dialog.dismiss();  
                e.printStackTrace();
  
                runOnUiThread(new Runnable() {
                    public void run() {
                        messageText.setText("Got Exception : see logcat ");
                        Toast.makeText(MainActivity.this, "Got Exception : see logcat ", Toast.LENGTH_SHORT).show();
                    }
                });
                Log.e("Upload file to server Exception", "Exception : "  + e.getMessage(), e);  
            }
            dialog.dismiss();       
            return serverResponseCode; 
  
         } // End else block 
       }}
  </code></pre>
  
  <p>PHP Server code
  in file uploading ,I am done file uploading done through chunk ,please anyone help me send right code file uploading through chunk  and relevant android file uploading code </p>
  
  <pre><code>&lt;?php
  
  if (empty($_FILES) || $_FILES['file']['error']) {
  die('{"OK": 0, "info": "Failed to move uploaded file."}');
  }
  
  $chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0;
  $chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 0;
  
  $fileName = isset($_REQUEST["name"]) ? $_REQUEST["name"] : $_FILES["file"]["name"];
  $filePath = "uploads/$fileName";
  
  
  // Open temp file
  $out = @fopen("{$filePath}.part", $chunk == 0 ? "wb" : "ab");
  //$out2 = @fopen("{$filePath}.part2", $chunk == 0 ? "wb" : "ab");
  if ($out) {
  // Read binary input stream and append it to temp file
  $in = @fopen($_FILES['file']['tmp_name'], "rb");
  
  if ($in) {
  while ($buff = fread($in, 4096))
        fwrite($out, $buff);
     //print($out);
   // echo sizeof($out);
  } else
  die('{"OK": 0, "info": "Failed to open input stream."}');
  
  @fclose($in);
  
  @fclose($out);
  
  @unlink($_FILES['file']['tmp_name']);
  } else
  die('{"OK": 0, "info": "Failed to open output stream."}');
  
  
  // Check if file has been uploaded
  
  if (!$chunks || $chunk == $chunks - 1)
  {
  // Strip the temp .part suffix off
  rename("{$filePath}.part", $filePath);
  }
  
  
  die('{"OK": 1, "info": "Upload successful."}');?&gt;
  </code></pre>