Uploading file in php server from android device
I don't know about your code but providing you both working codes:This is for all types of files. I used it for image, audio and for video files.
Android:
new UploadFileAsync().execute(""); private class UploadFileAsync extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { try { String sourceFileUri = "/mnt/sdcard/abc.png"; 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()) { try { String upLoadServerUri = "http://website.com/abc.php?"; // 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("bill", sourceFileUri); dos = new DataOutputStream(conn.getOutputStream()); dos.writeBytes(twoHyphens + boundary + lineEnd); dos.writeBytes("Content-Disposition: form-data; name=\"bill\";filename=\"" + sourceFileUri + "\"" + 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 > 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(); if (serverResponseCode == 200) { // messageText.setText(msg); //Toast.makeText(ctx, "File Upload Complete.", // Toast.LENGTH_SHORT).show(); // recursiveDelete(mDirectory1); } // close the streams // fileInputStream.close(); dos.flush(); dos.close(); } catch (Exception e) { // dialog.dismiss(); e.printStackTrace(); } // dialog.dismiss(); } // End else block } catch (Exception ex) { // dialog.dismiss(); ex.printStackTrace(); } return "Executed"; } @Override protected void onPostExecute(String result) { } @Override protected void onPreExecute() { } @Override protected void onProgressUpdate(Void... values) { }}
PHP::
<?php if (is_uploaded_file($_FILES['bill']['tmp_name'])) { $uploads_dir = './'; $tmp_name = $_FILES['bill']['tmp_name']; $pic_name = $_FILES['bill']['name']; move_uploaded_file($tmp_name, $uploads_dir.$pic_name); } else{ echo "File not uploaded successfully."; } ?>
Try this: it 100% working copy.
Upload function: (Parameter to a function is the imagePath)
public void uploadFile(String sourceFileUri) { String fileName = imagePath; 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(imagePath); if (!sourceFile.isFile()) { if (dialog != null && dialog.isShowing()) { dialog.dismiss(); } Log.e("uploadFile", "Source File not exist :"+imagePath); } else { try { // open a URL connection to the Servlet FileInputStream fileInputStream = new FileInputStream(sourceFile); URL url = new URL(Upload_Image_URL); // 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("uploaded_file", fileName); dos = new DataOutputStream(conn.getOutputStream()); dos.writeBytes(twoHyphens + boundary + lineEnd); dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\"" + 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 > 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); //close the streams // fileInputStream.close(); dos.flush(); dos.close(); } catch (MalformedURLException ex) { if (dialog != null && dialog.isShowing()) { dialog.dismiss(); } ex.printStackTrace(); Log.e("Upload file to server", "error: " + ex.getMessage(), ex); } catch (Exception e) { if (dialog != null && dialog.isShowing()) { dialog.dismiss(); } e.printStackTrace(); } if (dialog != null && dialog.isShowing()) { dialog.dismiss(); } } // End else block }
Php Service:
$file_path = "images/"; $file_path = $file_path . basename( $_FILES['uploaded_file']['name']); if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) { echo "success"; } else{ echo "fail";}
Must create a folder named "images" in the server so $file_path is valid
If you are using free hosting then the pages are getting redirected for tracking no. of hits. You probably receive Http Response :200 OK but you wont see file uploaded because file is lost.
I myself wasted 3 days searching for the solution but found nothing. Figured this out myself.