Come inviare più immagini al server utilizzando MultipartEntity da android

Ciao io sono l’invio di Immagini e Testo per php webservice utilizzando il seguente codice.

try {


            HttpClient httpClient = new DefaultHttpClient();
            HttpContext localContext = new BasicHttpContext();
            HttpPost httpPost = new HttpPost(URL);

            MultipartEntity entity = new MultipartEntity(
                    HttpMultipartMode.BROWSER_COMPATIBLE);

            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            bitmap.compress(CompressFormat.JPEG, 75, bos);
            byte[] data = bos.toByteArray();

            entity.addPart("files[]",
                    new ByteArrayBody(data, "myImage.jpg"));

            entity.addPart("message0", new StringBody(caption.getText()
                    .toString()));

            httpPost.setEntity(entity);
            HttpResponse response = httpClient.execute(httpPost,
                    localContext);
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(
                            response.getEntity().getContent(), "UTF-8"));

            String sResponse = reader.readLine();
            return sResponse;
        } catch (Exception e) {
            if (dialog.isShowing())
                dialog.dismiss();
            Toast.makeText(ImageUpload.this, e.getMessage(),
                    Toast.LENGTH_LONG).show();
            Log.e(e.getClass().getName(), e.getMessage(), e);
            return null;
        }

    }

Funziona perfettamente. Ma questa è solo una immagine da inviare. Ora mi inviare 5 immagini e testo.

Esempio:- Image1 – Testo1

Immagine2 – Testo2 ecc..

Così io sono confuso su come memorizzare 5 immagini uno per uno, e alla finale invia scegliere di inviare le immagini e il testo associato al server.

Sono ottenere l’immagine da Fotocamera.

Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(
                    Intent.createChooser(intent, "Select Picture"),
                    PICK_IMAGE);


public void onActivityResult_photo(int requestCode, int resultCode,
        Intent data) {
    //TODO Auto-generated method stub
    if (resultCode == RESULT_OK) {

        if (data != null) {
            mImageCaptureUri = data.getData();
            display(mImageCaptureUri);
        } else {
            Toast.makeText(CustomTabActivity.mTabHost.getContext(),
                    "No photo selected..", Toast.LENGTH_SHORT).show();
        }

    }

}


private String display(Uri mImageCaptureUri2) {
    //TODO Auto-generated method stub
    String base64string = null;
    try {

        if (mImageCaptureUri2 != null) {

            System.gc();

            selectedImagePath = getPath(mImageCaptureUri2);

            File filenew = new File(selectedImagePath);
            int file_size = Integer.parseInt(String.valueOf(filenew
                    .length() / 1024));
            if (file_size <= 10000) {
                PD1 = ProgressDialog.show(
                        CustomTabActivity.mTabHost.getContext(), "",
                        "Loading...");
                Handler refresh = new Handler(Looper.getMainLooper());

                refresh.post(new Runnable() {
                    public void run() {

                        PD1.setCancelable(true);
                        Bitmap newbitmap;
                        newbitmap = decodeFile(selectedImagePath);
                        ByteArrayOutputStream bs = new ByteArrayOutputStream();
                        newbitmap.compress(Bitmap.CompressFormat.PNG, 50,
                                bs);
                        img.setVisibility(View.VISIBLE);
                        img.setImageBitmap(newbitmap);
                        byte[] abc = bitmapToByteArray(newbitmap);
                        if (txt_phototext.getText().toString().equals("")) {
                            submit.put(abc, "");
                        } else {
                            submit.put(abc, txt_phototext.getText()
                                    .toString());

                            //executeMultipartPost();
                        }
                        PD1.dismiss();

                    }
                });

            } else {
                AlertDialog.Builder alertbox = new AlertDialog.Builder(
                        CustomTabActivity.mTabHost.getContext());
                alertbox.setMessage("Take Image Size Less than 10 MB");
                alertbox.setNeutralButton("Ok",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface arg0,
                                    int arg1) {
                                finish();
                            }
                        });
                alertbox.show();
            }

        } else {
            System.out.println("===============NULL========");
        }

    } catch (Exception e) {
        ////TODO Auto-generated catch block
        //e.printStackTrace();
    }
    return base64string;
}




    static Bitmap decodeFile(String str) {
    try {
        //decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(str), null, o);

        //Find the correct scale value. It should be the power of 2.
        final int REQUIRED_SIZE = 70;
        int width_tmp = o.outWidth, height_tmp = o.outHeight;
        int scale = 1;
        while (true) {
            if (width_tmp / 2 < REQUIRED_SIZE
                    || height_tmp / 2 < REQUIRED_SIZE)
                break;
            width_tmp /= 2;
            height_tmp /= 2;
            scale++;
        }

        //decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        return BitmapFactory.decodeStream(new FileInputStream(str), null,
                o2);
    } catch (FileNotFoundException e) {
    }
    return null;
}




public static byte[] bitmapToByteArray(Bitmap bitmap) {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    bitmap.compress(CompressFormat.PNG, 0 /* ignored for PNG */, bos);
    byte[] bitmapdata = bos.toByteArray();
    return bitmapdata;
}

Così Finalmente mi sono bloccato su questo si prega di aiuto.

Caricamento di più file al server Il file jar deve aggiungere per questo questo aiuta per voi a risolvere il tuo problema.

OriginaleL’autore Hardik Joshi | 2012-09-14

5 Replies
  1. 0

    E assicurarsi che la directory o cartella nel server è Eseguibile, Scrivibile e Leggibile. Ho avuto questo come il problema principale. Questo è chiamato autorizzazione 777.. credetemi, questo è importante come le altre cose da considerare.

    OriginaleL’autore Nabin

  2. 0

    Provare ad aumentare la post_max_size di yout php.file ini in WAMP server

    OriginaleL’autore A.M.N.Bandara

  3. 0

    Per tutti i dettagli, si prega di dare un’occhiata sul mio post Clicca qui

    è abbastanza difficile per l’invio di più immagini al server utilizzando MultipartEntity. Ho fatto ricerca ma non ho trovato alcuna soluzione giusta, poi ho fatto il mio modo di inviare più immagini al server
    , qui mi invia array di percorsi selezionati per asynctask e in asynctask ho inviato le immagini al server

    Chiamata Asysnctask Funzione-
    nuovo Upload_Multiple.excute(Array_of_Path[]))

        Private class Upload_Multiple_img extends AsyncTask<String, Void, String> {
    
        @Override
        protected void onPreExecute() {
            //TODO Auto-generated method stub
            super.onPreExecute();
    
        }
    
        protected String doInBackground(String... paths_array) {
    
    
    
            String data = "";
    
            for (int i = 0; i < paths_array.length; i++) {
    
                // get_Picture_bitmap() returns bitmap by passing path of image 
                 //  get_Picture_bitmap() is mentioned below. 
                Bitmap bitmap = get_Picture_bitmap(paths_array[i]);
    
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
    
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
                InputStream in = new ByteArrayInputStream(stream.toByteArray()); //convert
    
                DefaultHttpClient httpclient = new DefaultHttpClient();
    
                String server_funtion_url="...serveraddres"+funtion_at_server"";
                HttpPost httppost = new HttpPost(server_funtion_url); //server
    
                MultipartEntity reqEntity = new MultipartEntity();
    
                obj_SP = ImagePicker.this.getSharedPreferences("Eperty", 0);
    
                String id_prop = obj_SP.getString("new_prop_id", "");
    
                String Image_Name =
                        + String.valueOf(System.currentTimeMillis()) + ".jpg";
    //image is a key which is used at server end to get this 
                reqEntity.addPart("image", Image_Name, in);
    
                httppost.setEntity(reqEntity);
    
                HttpResponse response = null;
                try {
                    response = httpclient.execute(httppost);
                    data = EntityUtils.toString(response.getEntity());
                    System.out.println("FFFF== " + data);
    
                } catch (ClientProtocolException e) {
                    //TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    //TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (ParseException e) {
                    //TODO Auto-generated catch block
                    e.printStackTrace();
    
                }
    
            }
    
            return data;
        }
    
        @Override
        protected void onProgressUpdate(Void... values) {
    
            super.onProgressUpdate(values);
        }
    
        @Override
        protected void onPostExecute(String result) {
    
            ConstantData.ToastAlert(ImagePicker.this,
                    "Images Uploaded successfully");
    
        }
    }

    //);

    • Per comprimere le immagini e ottenere bitmap per i fatti di seguito funtion*

      public Bitmap get_Picture_bitmap(String imagePath) {
      
      long size_file = getFileSize(new File(imagePath));
      
      size_file = (size_file) / 1000;//in Kb now
      int ample_size = 1;
      
      if (size_file <= 250) {
      
          System.out.println("SSSSS1111= " + size_file);
          ample_size = 2;
      
      } else if (size_file > 251 && size_file < 1500) {
      
          System.out.println("SSSSS2222= " + size_file);
          ample_size = 4;
      
      } else if (size_file >= 1500 && size_file < 3000) {
      
          System.out.println("SSSSS3333= " + size_file);
          ample_size = 8;
      
      } else if (size_file >= 3000 && size_file <= 4500) {
      
          System.out.println("SSSSS4444= " + size_file);
          ample_size = 12;
      
      } else if (size_file >= 4500) {
      
          System.out.println("SSSSS4444= " + size_file);
          ample_size = 16;
      }
      
      Bitmap bitmap = null;
      
      BitmapFactory.Options bitoption = new BitmapFactory.Options();
      bitoption.inSampleSize = ample_size;
      
      Bitmap bitmapPhoto = BitmapFactory.decodeFile(imagePath, bitoption);
      
      ExifInterface exif = null;
      try {
          exif = new ExifInterface(imagePath);
      } catch (IOException e) {
          //Auto-generated catch block
          e.printStackTrace();
      }
      int orientation = exif
              .getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);
      Matrix matrix = new Matrix();
      
      if ((orientation == 3)) {
          matrix.postRotate(180);
          bitmap = Bitmap.createBitmap(bitmapPhoto, 0, 0,
                  bitmapPhoto.getWidth(), bitmapPhoto.getHeight(), matrix,
                  true);
      
      } else if (orientation == 6) {
          matrix.postRotate(90);
          bitmap = Bitmap.createBitmap(bitmapPhoto, 0, 0,
                  bitmapPhoto.getWidth(), bitmapPhoto.getHeight(), matrix,
                  true);
      
      } else if (orientation == 8) {
          matrix.postRotate(270);
          bitmap = Bitmap.createBitmap(bitmapPhoto, 0, 0,
                  bitmapPhoto.getWidth(), bitmapPhoto.getHeight(), matrix,
                  true);
      
      } else {
          matrix.postRotate(0);
          bitmap = Bitmap.createBitmap(bitmapPhoto, 0, 0,
                  bitmapPhoto.getWidth(), bitmapPhoto.getHeight(), matrix,
                  true);
      
      }
      
      return bitmap;

      }
      **

    • Server fine Codice *

      $target_dir = "../webadmin/user_image/";
      $target_dir = $target_dir . basename($_FILES["user_img"]["name"]);
      if(move_uploaded_file($_FILES["image"]["tmp_name"], $target_dir))
        {
           $msg = "The file ". basename($result[0]). " has been uploaded.";
           $send_arr['success'] = 1;
           $send_arr['message'] = $msg;
           echo json_encode($send_arr);
        }
      else 
        {
           $msg = "Sorry, there was an error uploading your file.";
           $send_arr['success'] = 0;
           $send_arr['message'] = $msg;
           echo json_encode($send_arr);
        }
    il tuo link è in mostra Account Suspended
    Perché non si può solo creare un array di oggetto json tue immagini in base64 e inviare al server e il server api leggere quelle immagini la conversione di byte e utilizzare come immagine.

    OriginaleL’autore Prashant Maheshwari Andro

  4. 0

    Perché non si può solo creare un array di oggetto json tue immagini in base64 e inviare al server e il server api leggere quelle immagini la conversione di byte e utilizzare come immagine.
    Controllare la mia risposta e cercare di attuare.
    In Android come registrare i dati di webservice che si è creata in WCF?

    E le immagini sono sempre dalla fotocamera conservarle in uri nella sdcard e lettera di leggerli. È possibile assegnare un nome immagine sequntialy. E leggere uri.

    perché per immagini di grandi dimensioni base 64 stringa può essere davvero grande e a volte non invia completamente. Ecco perché a caricare un file è un’opzione migliore.

    OriginaleL’autore Pramod mishra

  5. -1

    Si prega di trovare il metodo sotto…qui i m invio di mutiple file di immagine utilizzando AQUERY. I migliori lib eseguire in background rete di attività correlate.(Come AJAX).

    https://code.google.com/p/android-query/

       public void uploadImageFile( String filePath,
                String message) {
    
            Context context = ApplicationContextProvider.getContext();
            String url = SERVER_URL + "/user/uploadImageFile";
    
    
                try {
                    Toast.makeText(context, "Uploading...", Toast.LENGTH_SHORT)
                            .show();
    
                    String compressedFile = CommonUtilities.compressImage(filePath,
                            context);
    
                    Map<String, Object> params = new HashMap<String, Object>();
    
    
                    File imageFile = new File(compressedFile);
                    byte[] imageBytes1 = FileUtils.readFileToByteArray(imageFile);
                    params.put("imageBytes", imageBytes1);
                    params.put("message",URLEncoder.encode(message, "UTF-8"));
    
    
                    AQuery aq = new AQuery(context);
                    aq.ajax(url, params, JSONObject.class,
                            new AjaxCallback<JSONObject>() {
                                @Override
                                public void callback(String url, JSONObject json,
                                        AjaxStatus status) {
                                    Toast.makeText(
                                            ApplicationContextProvider.getContext(),
                                            "Uploaded successfully",
                                            Toast.LENGTH_SHORT).show();
    
    
    
                                }
                            });
                } catch (Exception e) {
                    e.printStackTrace();
                    Toast.makeText(context, e.getMessage(), Toast.LENGTH_SHORT)
                            .show();
                }
    
        }
    Grazie per la condivisione bro 🙂

    OriginaleL’autore Sajesh Kumar

Lascia un commento