sto condividendo la soluzioneper inviare un'immagine , audio o un file divideo con parametri utilizzando HttpURLConnection. I parametri possono essere (stringa normale o JSON).HttpURLConnection per inviare file di immagini, audio e video con il parametro può (String o JSON String) Android
(client Android per PHP Back End)
Scenario: necessario caricare i file multimediali (audio, video e immagini con i parametri).
I file multimediali verranno archiviati in una cartella del server e i parametri in db.
ho affrontato un problema che, immagine è stato caricato con successo mentre parametri scomparso.
soluzione Potenziale trovato
scelta HttpURLConnection invece di HttpClient come recommend here
Ci si potrebbe chiedere, il client più?
Il client Apache HTTP ha meno errori su Eclair e Froyo. È la scelta migliore per queste versioni.
Per Gingerbread e meglio, HttpURLConnection è la scelta migliore. La sua semplice API e le ridotte dimensioni lo rendono perfetto per Android. La compressione trasparente e la cache di risposta riducono l'utilizzo della rete, migliorano la velocità e fanno risparmiare batteria. Le nuove applicazioni dovrebbero usare HttpURLConnection; è dove andremo a spendere le nostre energie andando avanti.
Codice 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;
}
}
codice 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";
}
Spero che questo aiuti.
Qualsiasi domanda mi chieda.
sei in grado di ottenere altre variabili con immagine o video? Per favore spiegate qui –
Per la variabile 'conn', non avete invocato l'operazione' connect', come potete aspettarvi di avere il codice di risposta? – zionpi
SO è un sito di domande e risposte. Per favore [modifica] il tuo post in una domanda che lasci qui e una risposta che inserisci qui sotto. – Teepeemm