Wie sende ich eine Datei in Android von einem mobilen Gerät zum Server mit http?

In Android, wie sende ich eine Datei (Daten) von einem mobilen Gerät zum Server mit http.

   

Einfach, können Sie eine Post-Anfrage verwenden und Ihre Datei als Binärdatei (Byte-Array) senden.

String url = "http://yourserver"; File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "yourfile"); try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(url); InputStreamEntity reqEntity = new InputStreamEntity( new FileInputStream(file), -1); reqEntity.setContentType("binary/octet-stream"); reqEntity.setChunked(true); // Send in multiple parts if needed httppost.setEntity(reqEntity); HttpResponse response = httpclient.execute(httppost); //Do something with response... } catch (Exception e) { // show error } 

Dies kann mit einer HTTP-Post-Anfrage an den Server erfolgen:

 HttpClient http = AndroidHttpClient.newInstance("MyApp"); HttpPost method = new HttpPost("http://url-to-server"); method.setEntity(new FileEntity(new File("path-to-file"), "application/octet-stream")); HttpResponse response = http.execute(method); 

Wickeln Sie alles in eine Async-Aufgabe ein, um Threading-Fehler zu vermeiden.

 public class AsyncHttpPostTask extends AsyncTask { private static final String TAG = AsyncHttpPostTask.class.getSimpleName(); private String server; public AsyncHttpPostTask(final String server) { this.server = server; } @Override protected String doInBackground(File... params) { Log.d(TAG, "doInBackground"); HttpClient http = AndroidHttpClient.newInstance("MyApp"); HttpPost method = new HttpPost(this.server); method.setEntity(new FileEntity(params[0], "text/plain")); try { HttpResponse response = http.execute(method); BufferedReader rd = new BufferedReader(new InputStreamReader( response.getEntity().getContent())); final StringBuilder out = new StringBuilder(); String line; try { while ((line = rd.readLine()) != null) { out.append(line); } } catch (Exception e) {} // wr.close(); try { rd.close(); } catch (IOException e) { e.printStackTrace(); } // final String serverResponse = slurp(is); Log.d(TAG, "serverResponse: " + out.toString()); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } } 

Die effektivste Methode ist die Verwendung von Android-async-http

Sie können diesen Code verwenden, um eine Datei hochzuladen:

 // gather your request parameters File myFile = new File("/path/to/file.png"); RequestParams params = new RequestParams(); try { params.put("profile_picture", myFile); } catch(FileNotFoundException e) {} // send request AsyncHttpClient client = new AsyncHttpClient(); client.post(url, params, new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, byte[] bytes) { // handle success response } @Override public void onFailure(int statusCode, Header[] headers, byte[] bytes, Throwable throwable) { // handle failure response } }); 

Beachten Sie, dass Sie diesen Code direkt in Ihre Hauptaktivität einfügen können und keine Hintergrundaufgabe explizit erstellen müssen. AsyncHttp wird sich darum kümmern!

Die effektivste Methode ist die Verwendung von org.apache.http.entity.mime.MultipartEntity;

Siehe diesen Code aus dem Link mit org.apache.http.entity.mime.MultipartEntity;

 public class SimplePostRequestTest3 { /** * @param args */ public static void main(String[] args) { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://localhost:8080/HTTP_TEST_APP/index.jsp"); try { FileBody bin = new FileBody(new File("C:/ABC.txt")); StringBody comment = new StringBody("BETHECODER HttpClient Tutorials"); MultipartEntity reqEntity = new MultipartEntity(); reqEntity.addPart("fileup0", bin); reqEntity.addPart("fileup1", comment); reqEntity.addPart("ONE", new StringBody("11111111")); reqEntity.addPart("TWO", new StringBody("222222222")); httppost.setEntity(reqEntity); System.out.println("Requesting : " + httppost.getRequestLine()); ResponseHandler responseHandler = new BasicResponseHandler(); String responseBody = httpclient.execute(httppost, responseHandler); System.out.println("responseBody : " + responseBody); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { httpclient.getConnectionManager().shutdown(); } } } 

Hinzugefügt:

Beispiellink