2

am I uploading this file right? Here is my code:


Deleted Code

it is basically just a async task that sends the file (csv) to the web server.

I am getting back status code 400 :( Anyone know what I am doing wrong?


Edit: Now I am getting back status code 411, but when I specify the content-length it comes back with ClientProtocolException.

Here's my code now:

UploadTask uploadtask; public class UploadTask extends AsyncTask<Void, byte[], Boolean> { HttpPost httppost; @Override protected Boolean doInBackground(Void... params) { Boolean result = false; String id = projectIDs.get((int) spinner.getSelectedItemId()); Log.i("TAG", id); try { l(send(String.valueOf(id), "http://" + site + "/restlet/position.csv?project=" + id, "/csv.csv")); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } return result; } private void entity(String id, String file) throws JSONException, UnsupportedEncodingException, FileNotFoundException { // Add your data File myFile = new File(Environment.getExternalStorageDirectory(), file); FileEntity fileEntity = new FileEntity(myFile, "multipart/form-data;"); fileEntity.setChunked(true); long len = fileEntity.getContentLength(); httppost.getParams().setParameter("project", id); httppost.setEntity(fileEntity); //httppost.addHeader("Content-Length",String.valueOf(len)); httppost.setHeader("Content-Length", String.valueOf(len)); } private String send(String id, String URL, String file) throws ClientProtocolException, IOException, JSONException { l(URL); HttpResponse response = null; httppost = new HttpPost(URL); entity(id, file); response = httpclient.execute(httppost); Header[] head = response.getAllHeaders(); String str = String.valueOf(response.getStatusLine() .getStatusCode()); response.getEntity().consumeContent(); return str; } } 

3 Answers 3

8

This code here worked for uploading a file to the web server :) After many hours of struggle I got it, had to import MultipartEntity, StringBody and FileBody from apache however

httppost = new HttpPost(URL); MultipartEntity entity = new MultipartEntity(); entity.addPart("title", new StringBody("position.csv", Charset.forName("UTF-8"))); File myFile = new File(Environment.getExternalStorageDirectory(), file); FileBody fileBody = new FileBody(myFile); entity.addPart("file", fileBody); httppost.setEntity(entity); httppost.getParams().setParameter("project", id); 
Sign up to request clarification or add additional context in comments.

Comments

2

For uploading the file to a server see the following link:

http://vikaskanani.wordpress.com/2011/01/11/android-upload-image-or-file-using-http-post-multi-part/

Comments

0

Before any thing

1- to select file use this or select it by anyway

https://github.com/iPaulPro/aFileChooser just import it

2- Don't forget to add this to manifest

 <\uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> 

3- Don't forget to change the uri in java code and the folder name in php code

4- Just copy and past this code and will work i tried it and working 100%

Java

package com.example.uploadthestupidfile; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; import com.ipaulpro.afilechooser.utils.FileUtils; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.StrictMode; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; @SuppressLint("NewApi") public class MainActivity extends Activity { private static final int FILE_SELECT_CODE = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); intent.addCategory(Intent.CATEGORY_OPENABLE); try { startActivityForResult( Intent.createChooser(intent, "Select a File to Upload"), FILE_SELECT_CODE); } catch (android.content.ActivityNotFoundException ex) { // Potentially direct the user to the Market with a Dialog Toast.makeText(this, "Please install a File Manager.", Toast.LENGTH_SHORT).show(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case FILE_SELECT_CODE: if (resultCode == RESULT_OK) { // Get the Uri of the selected file Uri uri = data.getData(); // Log.d(TAG, "File Uri: " + uri.toString()); // Get the path String path = FileUtils.getPath(this, uri); Toast.makeText(this,""+path,Toast.LENGTH_LONG).show(); try { upload(path); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); Toast.makeText(this,"ErrorS",Toast.LENGTH_LONG).show(); } // Log.d(TAG, "File Path: " + path); // Get the file instance // File file = new File(path); // Initiate the upload } break; } super.onActivityResult(requestCode, resultCode, data); } public void upload(String selectedPath) throws Exception { HttpURLConnection connection = null; DataOutputStream outputStream = null; DataInputStream inputStream = null; String pathToOurFile = selectedPath; String urlServer = "http://yoursite/upload_files.php"; String lineEnd = "\r\n"; String twoHyphens = "--"; String boundary = "*****"; int bytesRead, bytesAvailable, bufferSize; byte[] buffer; int maxBufferSize = 1 * 1024 * 1024; FileInputStream fileInputStream = new FileInputStream(new File( pathToOurFile)); URL url = new URL(urlServer); connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setUseCaches(false); connection.setRequestMethod("POST"); connection.setRequestProperty("Connection", "Keep-Alive"); connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); outputStream = new DataOutputStream(connection.getOutputStream()); outputStream.writeBytes(twoHyphens + boundary + lineEnd); outputStream .writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + pathToOurFile + "\"" + lineEnd); outputStream.writeBytes(lineEnd); bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); buffer = new byte[bufferSize]; bytesRead = fileInputStream.read(buffer, 0, bufferSize); while (bytesRead > 0) { outputStream.write(buffer, 0, bufferSize); bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); bytesRead = fileInputStream.read(buffer, 0, bufferSize); } outputStream.writeBytes(lineEnd); outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); int serverResponseCode = connection.getResponseCode(); String serverResponseMessage = connection.getResponseMessage(); fileInputStream.close(); outputStream.flush(); outputStream.close(); } 

}

PHP upload_files.php

 <?php $target_path = "uploadedimages/"; //here folder name $target_path = $target_path . basename($_FILES['uploadedfile']['name']); error_log("Upload File >>" . $target_path . $_FILES['error'] . " \r\n", 3, "Log.log"); error_log("Upload File >>" . basename($_FILES['uploadedfile']['name']) . " \r\n", 3, "Log.log"); if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { echo "The file " . basename($_FILES['uploadedfile']['name']) . " has been uploaded"; } else { echo "There was an error uploading the file, please try again!"; } ?> 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.