Codice per caricare video da Android a PHP

Sto cercando di caricare video da codice Android al mio codice web server PHP ma non riesco ad avere successo. Mi riferisco al seguente link per eseguire l'operazione di caricamento, ma ricevo la seguente risposta nel mio codice Android, ma non riesco a trovare alcun file sul server PHP.

Risposta Android

DEBUG/ServerCode(29484): 200 DEBUG/serverResponseMessage(29484): OK 

Ho controllato molte cose come l'impostazione dei valori nei file php.ini . Sebbene io possa caricare immagini dal codice Android al server perché da Android sto inviando un ByteArray codifica a 64 bit e c'è una function già pronta in php che può creare immagini da ByteArray codificati.

Ma anche questo codice non funziona in caso di altri file con un tipo diverso dall'image.

Per favore guidami se qualcuno di voi ha fatto qualcosa di simile prima.

Codice PHP sto usando:

 <?php $target_path = "./upload/"; $target_path = $target_path . basename( $_FILES['uploadedfile']['name']); if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { echo "The file ".basename( $_FILES['uploadedfile']['name'])." has been uploaded"; } else { echo "There was an error uploading the file, please try again!"; } ?> 

Codice Android che sto utilizzando:

 public void videoUpload() { HttpURLConnection connection = null; DataOutputStream outputStream = null; DataInputStream inputStream = null; String pathToOurFile = "/sdcard/video-2010-03-07-15-40-57.3gp"; String urlServer = "http://10.0.0.15/sampleWeb/handle_upload.php"; String lineEnd = "\r\n"; String twoHyphens = "--"; String boundary = "*****"; int bytesRead, bytesAvailable, bufferSize; byte[] buffer; int maxBufferSize = 1*1024*1024; try { FileInputStream fileInputStream = new FileInputStream(new File(pathToOurFile) ); URL url = new URL(urlServer); 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"); outputStream = new DataOutputStream( connection.getOutputStream() ); outputStream.writeBytes(twoHyphens + boundary + lineEnd); outputStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + pathToOurFile ); 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); // Responses from the server (code and message) int serverResponseCode = connection.getResponseCode(); String serverResponseMessage = connection.getResponseMessage(); Log.d("ServerCode",""+serverResponseCode); Log.d("serverResponseMessage",""+serverResponseMessage); fileInputStream.close(); outputStream.flush(); outputStream.close(); } catch (Exception ex) { ex.printStackTrace(); } } 

La mia java è un po 'ropey ma ….

Sembra che connection.getResponseCode stia restituendo solo il codice di stato HTTP e connection.getResponseMessage sta restituendo solo il messaggio di stato HTTP – ma tu sei PHP non fa nulla per manipolare quei valori. Potresti provare:

 $target_path = "./upload/"; $src = $_FILES['uploadedfile']['name']; $target_path .= basename($src); if(file_exists($src) && && move_uploaded_file($src, $target_path) ) { echo "The file ".basename( $_FILES['uploadedfile']['name'])." has been uploaded"; } else { header("Server Error", true, 503); echo "There was an error uploading the file, please try again!"; $msg = "src size ? " . filesize($src) . "\n dest dir writable ?" . is_writeable(dirname($target_path)) ? "Y\n" : "N\n" . "FILES contains :\n"; . var_export($_FILES,true); // now write $msg somwhere you can read it } 

Questo può aiutare a restringere ciò che è andato storto

 private String mString; private Uri image_uri; private String response; private HttpURLConnection conn = null; private DataOutputStream dos = null; private String lineEnd = "\r\n"; private String twoHyphens = "--"; private String boundary = "*****"; private int bytesRead, bytesAvailable, bufferSize; private byte[] buffer; private String url_for_image_upload = "your_web_api_put_here"; private int maxBufferSize = 1 * 1024 * 1024; 

// quindi chiama questi due methods sul listener di onclick del button

mString = getRealPathFromURI (image_uri);

ImageUpload ();

// scrivi questi methods qui

 private void ImageUpload() { Toast.makeText(getApplicationContext(), "Please Wait while uploading Image", Toast.LENGTH_SHORT).show(); try { FileInputStream fileInputStream = new FileInputStream(new File(mString)); URL url = new URL(url_for_image_upload); conn = (HttpURLConnection) url.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setUseCaches(false); conn.setRequestMethod("POST"); conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); dos = new DataOutputStream(conn.getOutputStream()); dos.writeBytes(twoHyphens + boundary + lineEnd); dos.writeBytes("Content-Disposition: form-data; name=\"img_name\";filename=\"img_name" + "\"" + lineEnd); dos.writeBytes(lineEnd); bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); buffer = new byte[bufferSize]; 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); } dos.writeBytes(lineEnd); dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); BufferedReader in = new BufferedReader(new InputStreamReader( conn.getInputStream())); Log.d("BuffrerReader", "" + in); if (in != null) { response = convertStreamToString(in); Log.e("FINAL_RESPONSE-LENGTH",""+response.length()); Log.e("FINAL_RESPONSE", response); } fileInputStream.close(); dos.flush(); dos.close(); if (response.startsWith("0")) { Toast.makeText(getApplicationContext(), "Image Uploaded not successfully", Toast.LENGTH_SHORT) .show(); } else { Toast.makeText(getApplicationContext(), "Image Uploaded successfully", Toast.LENGTH_SHORT) .show(); } } catch (MalformsdURLException ex) { Log.e("Image upload", "error: " + ex.getMessage(), ex); } catch (IOException ioe) { Log.e("Image upload", "error: " + ioe.getMessage(), ioe); } } public String getRealPathFromURI(Uri contentUri) { String[] proj = { MediaColumns.DATA }; @SuppressWarnings("deprecation") Cursor cursor = managedQuery(contentUri, proj, null, null, null); int column_index = cursor .getColumnIndexOrThrow(MediaColumns.DATA); cursor.moveToFirst(); mString = cursor.getString(column_index); return mString; } public static String convertStreamToString(BufferedReader is) throws IOException { if (is != null) { StringBuilder sb = new StringBuilder(); String line; try { while ((line = is.readLine()) != null) { sb.append(line).append(""); } } finally { is.close(); } return sb.toString(); } else { return ""; } }