如何使用MultipartEntity从Android的多张图片发送到服务器发送到、如何使用、多张、服务器

2023-09-12 22:03:57 作者:我好哇塞

您好我使用发送图片和文字到PHP Web服务下code。

Hello I am sending Images and Text to php webservice using following code.

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;
        }

    }

这很好地工作。但是这仅用于一个图像的发送。现在我送5的图像和文字吧。

It work perfectly. But this is for only one image send. Now i send 5 images and text with it.

例: - Image1的 - 文本1           IMAGE2 - 文本2等。

Example:- Image1 - Text1 Image2 - Text2 etc..

所以我很迷惑有关如何存储5图像一招一式,在最终提交点击发送与之相关的图片和文字到服务器。

So I am confuse about how to store 5 images one by one and at final submit click send images and text associated with it to server.

我是从相机获得的图像而已。

I am get image from Camera only.

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;
}

所以,最后我坚持这个请大家帮帮忙。

So Finally i am stuck about this please help.

推荐答案

对于所有细节,请对我的文章一看的点击此处

它相当困难的使用MultipartEntity多个图像发送到服务器。我没有搜索这个,但没有找到任何合适的解决方案的话,我做了我自己的方式去多张图片发送到服务器 ,在这里我送的选择的路径阵列的AsyncTask和AsyncTask的我发图片到服务器的

调用Asysnctask功能 - 新Upload_Multiple.excute(Array_of_Path []))

Calling Asysnctask Function- new 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");

    }
}

//);

//);

有关COM pressing图像和获取的位图我提出以下funtion *

For compressing the images and getting bitmap for i made below 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;

} **

服务器端code *

Server end Code *

$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);
  }