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.

36
demandé sur alkber 2014-11-01 09:33:45

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.

1
répondu Sanjay Kakadiya 2016-04-02 04:34:13

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;
}
0
répondu Sibidharan 2016-04-02 18:16:03