Как отправить файл в Android с мобильного устройства на сервер с помощью http?

В android, как мне отправить файл (данные) с мобильного устройства на сервер с помощью http.

Solutions Collecting From Web of "Как отправить файл в Android с мобильного устройства на сервер с помощью http?"

Легко, вы можете использовать запрос на отправку и отправить файл как двоичный (массив байтов).

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 } 

Это можно сделать с помощью HTTP-запроса на сервер:

 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); 

Оберните все это в задачу Async, чтобы избежать ошибок потоковой передачи.

 public class AsyncHttpPostTask extends AsyncTask<File, Void, String> { 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; } } 

Наиболее эффективным методом является использование android-async-http

Вы можете использовать этот код для загрузки файла:

 // 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 } }); 

Обратите внимание, что этот код можно поместить прямо в основное действие, не нужно явно создавать фоновые задачи. AsyncHttp позаботится об этом для вас!

Наиболее эффективным методом является использование org.apache.http.entity.mime.MultipartEntity;

См. Этот код из ссылки, используя 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<String> 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(); } } } 

Добавлено:

Пример ссылки