Necesita enviar imagen y texto al servidor

En mi aplicación, necesito enviar la imagen y la nota (texto de 180) caracteres al servidor.

Ahora puedo enviar imágenes y texto por separado, pero necesito enviarlos juntos ahora.

¿Cuál sería el enfoque?

Actualmente estoy enviando imágenes usando hilo.

// open a URL connection to the Servlet FileInputStream fileInputStream = new FileInputStream( sourceFile); URL url = new URL( "http://xxx.com/image.php"); // 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); // conn.setRequestProperty("id", imei); dos = new DataOutputStream(conn.getOutputStream()); dos.writeBytes(twoHyphens + boundary + lineEnd); dos.writeBytes("Content-Disposition: form-data; name=uploaded_file; filename=" + fileName + imei + 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); if (serverResponseCode == 200) { runOnUiThread(new Runnable() { public void run() { Toast.makeText(getBaseContext(), "File Upload Complete.", Toast.LENGTH_SHORT) .show(); File delfile = new File(currentfile); //delfile.delete(); } }); } // close the streams // fileInputStream.close(); dos.flush(); dos.close(); } catch (MalformedURLException ex) { // dialog.dismiss(); ex.printStackTrace(); runOnUiThread(new Runnable() { public void run() { // messageText.setText("MalformedURLException Exception : check script url."); Toast.makeText(getBaseContext(), "MalformedURLException", Toast.LENGTH_SHORT) .show(); } }); Log.e("Upload file to server", "error: " + ex.getMessage(), ex); } catch (Exception e) { // dialog.dismiss(); e.printStackTrace(); runOnUiThread(new Runnable() { public void run() { // messageText.setText("Got Exception : see logcat "); Toast.makeText(getBaseContext(), "upload failed Please, try after some time ", Toast.LENGTH_SHORT).show(); } }); Log.e("Upload file to server Exception", "Exception : " + e.getMessage(), e); } // dialog.dismiss(); return serverResponseCode; } // End else block 

Para enviar texto, utilizo el método simple de http post.

Necesito esto para mi aplicación donde vamos a tomar una instantánea y escribir algo en el cuadro de texto de edición y enviarlo.

Antes que nada, necesitas este archivo jar org.apache.httpcomponents.httpclient_4.2.1 e importar a tu ruta de comstackción.

Puedes hacer eso de esa manera. considera lo siguiente

 import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import org.json.JSONException; import org.json.JSONObject; 

Y la statement:

  private List nameValuePairs; private HttpURLConnection connection = null; private DataOutputStream outputStream = null; private String lineEnd = "\r\n"; private String twoHyphens = "--"; private String boundary = "*****"; int bytesRead, bytesAvailable, bufferSize; byte[] buffer; int maxBufferSize = 1 * 1024 * 1024; 

Y el código fuente es el siguiente:

 try { FileInputStream fileInputStream = new FileInputStream(StickerToSend); URL url = new URL("Your URL"); connection = (HttpURLConnection) url.openConnection(); // Allow Inputs & Outputs connection.setDoInput(true); connection.setDoOutput(true); connection.setUseCaches(false); // Enable POST method connection.setRequestMethod("POST"); connection.setRequestProperty("Connection", "Keep-Alive"); connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); outputStream = new DataOutputStream(connection.getOutputStream()); // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Here you can add parameters as follows : outputStream.writeBytes(twoHyphens + boundary + lineEnd); // The keyword "type" is the key value and outputStream .writeBytes("Content-Disposition: form-data; name=\"type\"" + lineEnd); outputStream.writeBytes(lineEnd); // You can assign values as like follows : outputStream.writeBytes("Your value"); outputStream.writeBytes(lineEnd); outputStream.writeBytes(twoHyphens + boundary + lineEnd); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ outputStream.writeBytes(twoHyphens + boundary + lineEnd); outputStream .writeBytes("Content-Disposition: form-data; name=\"sticker\";filename=\"" + StickerToSend + "\"" + lineEnd); outputStream.writeBytes(lineEnd); bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); buffer = new byte[bufferSize]; // Read file 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(); Log.d("The server response message ", " Server Response" + serverResponseMessage); fileInputStream.close(); outputStream.flush(); // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ InputStream is = connection.getInputStream(); // retrieve the response from server int ch; StringBuffer b = new StringBuffer(); while ((ch = is.read()) != -1) { b.append((char) ch); } String result = b.toString(); Log.i("Response", result); JSONObject jsonobject; try { jsonobject = new JSONObject(result); boolean isPosted = jsonobject.getJSONObject("response") .getString("httpCode").equals("200") ? true : false; if (isPosted) mHandler.sendEmptyMessage(POST_SUCCESS); else mHandler.sendEmptyMessage(POST_FAILURE); } catch (JSONException e) { Log.d("the xceptions ", "Xcep in posting status messages are : " + e.getMessage()); } outputStream.close(); } catch (Exception e) { Log.d("Xceptions", "Xceptions are upload video file " + e.getMessage()); } 

Esta pieza de código realmente funciona muy bien. Lo he comprobado también Por favor, siéntase libre si hay algún problema.

Puede usar el codificador base64 para codificar imágenes en cadenas ( Codificación base 64 y decodificar código de ejemplo ) y crear un servicio web para enviar esto al servidor. Entonces en ese servicio web puedes agregar múltiples entradas

Intenta esto puede ayudarte

 public void WSCall(final String filePath, final String textTosend) { try { DefaultHttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://xxx.com/image.php"); StringBody data = new StringBody(textTosend, Charset.forName(HTTP.UTF_8)); MultiPartEntity entity = new MultiPartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); entity.addPart("uploaded_file", new FileBody(new File(filePath), "image/png")); entity.addPart("text", data); httppost.setEntity(entity); HttpResponse WSresponse = httpclient.execute(httppost); } catch (Throwable e) { } }