studio recibir parse how ejemplo datos create consumir array android httpurlconnection

recibir - jsonobject android studio



HttpURLConnection para enviar archivos de imagen, audio y video con el parĂ¡metro may(String o Json String) Android (2)

Estoy compartiendo la solución para enviar una imagen , audio o un archivo de video con parámetros usando HttpURLConnection . Los parámetros pueden ser (cadena simple o JSON).

(Cliente Android a PHP Back End)

Escenario: tiene que cargar archivos multimedia (audio, video e imagen con parámetros).

Los archivos multimedia se almacenarán en una carpeta del servidor y los parámetros en db.

Me enfrenté al problema de que la imagen se cargó correctamente mientras faltaban parámetros .

Posible solución encontrada

Elegir HttpURLConnection en lugar de Httpclient como lo recomiendo aquí

Usted se estará preguntando: ¿Qué cliente es el mejor?

El cliente Apache HTTP tiene menos errores en Eclair y Froyo. Es la mejor opción para estos lanzamientos.

Para Gingerbread y mejor, HttpURLConnection es la mejor opción. Su API simple y su pequeño tamaño lo hacen ideal para Android. La compresión transparente y el almacenamiento en caché de respuesta reducen el uso de la red, mejoran la velocidad y ahorran batería. Las nuevas aplicaciones deben usar HttpURLConnection; es donde gastaremos nuestra energía en el futuro.

Código de Android:

public int uploadFile(final String sourceFileUri) { String fileName = sourceFileUri; HttpURLConnection conn = null; DataOutputStream dos = null; String lineEnd = "/r/n"; String twoHyphens = "--"; String boundary = "*****"; int bytesRead, bytesAvailable, bufferSize; byte[] buffer; int maxBufferSize = 1 * 1024 * 1024; File sourceFile = new File(sourceFileUri); if (!sourceFile.isFile()) { dialog.dismiss(); Log.e("uploadFile", "Source File not exist :" + filepath); runOnUiThread(new Runnable() { public void run() { messageText.setText("Source File not exist :" + filepath); } }); return 0; } else { try { FileInputStream fileInputStream = new FileInputStream(sourceFile); URL url = new URL(upLoadServerUri); 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); dos = new DataOutputStream(conn.getOutputStream()); dos.writeBytes(twoHyphens + boundary + lineEnd); //Adding Parameter name String name="amir"; dos.writeBytes("Content-Disposition: form-data; name=/"name/"" + lineEnd); //dos.writeBytes("Content-Type: text/plain; charset=UTF-8" + lineEnd); //dos.writeBytes("Content-Length: " + name.length() + lineEnd); dos.writeBytes(lineEnd); dos.writeBytes(name); // mobile_no is String variable dos.writeBytes(lineEnd); dos.writeBytes(twoHyphens + boundary + lineEnd); //Adding Parameter phone String phone="9956565656"; dos.writeBytes("Content-Disposition: form-data; name=/"phone/"" + lineEnd); //dos.writeBytes("Content-Type: text/plain; charset=UTF-8" + lineEnd); //dos.writeBytes("Content-Length: " + name.length() + lineEnd); dos.writeBytes(lineEnd); dos.writeBytes(phone); // mobile_no is String variable dos.writeBytes(lineEnd); //Json_Encoder encode=new Json_Encoder(); //call to encode method and assigning response data to variable ''data'' //String data=encode.encod_to_json(); //response of encoded data //System.out.println(data); //Adding Parameter filepath dos.writeBytes(twoHyphens + boundary + lineEnd); String filepath="http://192.168.1.110/echo/uploads"+fileName; dos.writeBytes("Content-Disposition: form-data; name=/"filepath/"" + lineEnd); //dos.writeBytes("Content-Type: text/plain; charset=UTF-8" + lineEnd); //dos.writeBytes("Content-Length: " + name.length() + lineEnd); dos.writeBytes(lineEnd); dos.writeBytes(filepath); // mobile_no is String variable dos.writeBytes(lineEnd); //Adding Parameter media file(audio,video and image) dos.writeBytes(twoHyphens + boundary + lineEnd); dos.writeBytes("Content-Disposition: form-data; name=/"uploaded_file/";filename=/""+ fileName + "/"" + 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); serverResponseCode = conn.getResponseCode(); String serverResponseMessage = conn.getResponseMessage(); Log.i("uploadFile", "HTTP Response is : "+ serverResponseMessage + ": " + serverResponseCode); if (serverResponseCode == 200) { runOnUiThread(new Runnable() { public void run() { msg = "File Upload Completed./n/n See uploaded file here : /n/n" + "c:/wamp/www/echo/uploads"; messageText.setText(msg); Toast.makeText(MainActivity.this, "File Upload Complete.", Toast.LENGTH_SHORT) .show(); } }); } // 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(MainActivity.this, "MalformedURLException", Toast.LENGTH_SHORT) .show(); } }); Log.e("Upload file to server", "error: " + ex.getMessage(), ex); } catch (final Exception e) { dialog.dismiss(); e.printStackTrace(); runOnUiThread(new Runnable() { public void run() { messageText.setText("Got Exception : "+e.toString()); Toast.makeText(MainActivity.this, "Got Exception : see logcat ", Toast.LENGTH_SHORT).show(); } }); Log.e("Upload file to server Exception", "Exception : " + e.getMessage(), e); } dialog.dismiss(); return serverResponseCode; } }

Código Php:

$file_path = "uploads/"; //receive parameters $name=$_POST[''name'']; $phone=$_POST[''phone'']; $filepath=$_POST[''filepath'']; //receive media files(image , audio and video) $file_path = $file_path . basename( $_FILES[''uploaded_file''][''name'']); if(move_uploaded_file($_FILES[''uploaded_file''][''tmp_name''], $file_path)) { echo "Success"; }

Espero que esto ayude.

Cualquier pregunta me pregunta.


¡Puedes hacerlo más simple! Prueba lo siguiente.

public static String uploadImage(Bitmap bitmap, String urlString) { try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); bitmap = Local.resize(bitmap, 512, 512); if(filename.toLowerCase().endsWith("jpg") || filename.toLowerCase().endsWith("jpeg")) bitmap.compress(Bitmap.CompressFormat.JPEG, 70, bos); if(filename.toLowerCase().endsWith("png")) bitmap.compress(Bitmap.CompressFormat.PNG, 70, bos); ContentBody contentPart = new ByteArrayBody(bos.toByteArray(), filename); ContentBody body1 = new StringBody("something"); ContentBody body2 = new StringBody("something"); org.apache.http.entity.mime.MultipartEntity reqEntity = new org.apache.http.entity.mime.MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); reqEntity.addPart("image", contentPart); reqEntity.addPart("sample1", body1); reqEntity.addPart("sample2", body2); URL url = new URL(urlString); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(10000); conn.setConnectTimeout(15000); conn.setRequestMethod("POST"); conn.setUseCaches(false); conn.setDoInput(true); conn.setDoOutput(true); conn.setRequestProperty("Connection", "Keep-Alive"); conn.addRequestProperty("Content-length", reqEntity.getContentLength()+""); conn.addRequestProperty(reqEntity.getContentType().getName(), reqEntity.getContentType().getValue()); OutputStream os = conn.getOutputStream(); reqEntity.writeTo(conn.getOutputStream()); os.close(); conn.connect(); if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { Log.d("UPLOAD", "HTTP 200 OK."); return readStream(conn.getInputStream()); //This return returns the response from the upload. } else { Log.d("UPLOAD", "HTTP "+conn.getResponseCode()+" "+conn.getResponseMessage()+"."); String stream = readStream(conn.getInputStream()); //Log.d("UPLOAD", "Response: "+stream); return stream; } } catch (Exception e) { Log.d("UPLOAD_ERROR", "Multipart POST Error: " + e + "(" + urlString + ")"); } return null; }


Puede usar Retrofit para la llamada API. El soporte mínimo para Android es 2.3. Por favor revisa los detalles.