HttpURLConnection pour envoyer des fichiers image, audio et vidéo avec le paramètre may (chaîne ou chaîne Json) Android
je partage le solution envoyer image, audio et vidéo le fichier avec les paramètres à l'aide de HttpURLConnection. Les paramètres peuvent être (string simple ou JSON).
(Android Client to PHP Back end)
Scénario: Il faut télécharger des fichiers multimédia (audio, vidéo et image avec paramètres).
les fichiers médias seront stockés dans un dossier serveur et les paramètres à DB.
j'ai fait face à un problème, image a été téléchargée avec succès les paramètres ont disparu.
solution potentielle trouvée
Choisir HttpURLConnection au lieu de Httpclientrecommandons ici
vous vous demandez peut-être, quel client est le meilleur?
<!-Le client HTTP Apache a moins de bogues sur Eclair et Froyo. C'est le meilleur choix pour ces publier.pour le pain D'épice et mieux, HttpURLConnection est le meilleur choix. Son API simple et de petite taille le rend idéal pour Android. La compression transparente et la mise en cache de la réponse réduisent l'utilisation du réseau, améliorent la vitesse et économisent la batterie. Les nouvelles applications devraient utiliser HttpURLConnection; c'est là que nous dépenserons notre énergie à l'avenir.
Android Code:
public int uploadFile(final String sourceFileUri) {
String fileName = sourceFileUri;
HttpURLConnection conn = null;
DataOutputStream dos = null;
String lineEnd = "rn";
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.nn See uploaded file here : nn"
+ "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;
}
}
code 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";
}
J'espère que cela vous aidera.
Tout les questions me le demandent.
2 réponses
Vous pouvez utiliser Rénovation pour L'appel API. Le support Minimum pour Android est 2.3. Veuillez vérifier les détails.
Vous pouvez le rendre plus simple! Essayez les solutions suivantes.
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;
}