Comment puis-je envoyer un fichier dans Android à partir d'un appareil mobile vers un serveur en utilisant http?

Dans Android, comment puis-je envoyer un fichier (données) d'un appareil mobile vers un serveur en utilisant http.

  • Gardez la caméra libgdx à l'intérieur des limites lors du panoramique et du zoom
  • EditText dans ListView caché par le clavier lorsqu'il est concentré
  • Facebook SDK v4 LoginButton ignore les personnalisations XML
  • Java.lang.ClassNotFoundException: android.os.AsyncTask provoqué par AdMob / Google Play Services?
  • Comment utiliser une forme dessinable avec une image?
  • L'application ne fonctionne pas dans l'émulateur de studio visuel pour Android dans le studio visuel 2015
  • Comment savoir quelle intention est sélectionnée dans Intent.ACTION_SEND?
  • La vue Recycler à l'intérieur de NestedScrollView fait défiler pour commencer au milieu
  • Comment ajouter une vue de superposition sur une autre vue dans Android?
  • Android 4 boutons logiciels dans l'émulateur?
  • GCMNetworkManager n'exécute pas PeriodicTask après le redémarrage
  • Comment partager le fichier de stockage interne avec le client Gmail
  • 5 Solutions collect form web for “Comment puis-je envoyer un fichier dans Android à partir d'un appareil mobile vers un serveur en utilisant http?”

    Facile, vous pouvez utiliser une demande de publication et soumettre votre fichier en tant que binaire (tableau d'octets).

    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 } 

    Cela peut être fait avec une requête HTTP Post au serveur:

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

    Arrangez-le dans une tâche Async pour éviter d'enfiler des erreurs.

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

    La méthode la plus efficace consiste à utiliser android-async-http

    Vous pouvez utiliser ce code pour télécharger un fichier:

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

    Notez que vous pouvez mettre ce code directement dans votre activité principale, pas besoin de créer une tâche contextuelle explicitement. AsyncHttp prendra soin de cela pour vous!

    La méthode la plus efficace consiste à utiliser org.apache.http.entity.mime.MultipartEntity;

    Voir ce code à partir du lien en utilisant 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(); } } } 

    Ajoutée:

    Exemple de lien

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.