Spring Boot REST使用多部分请求将图像上传到Android中的服务器

时间:2016-02-04 08:39:38

标签: android spring-boot

      @RequestMapping(value="/upload/{id}", method=RequestMethod.POST)
        public @ResponseBody BillUpload billUpload(@PathVariable Integer id,
                @RequestParam("file") MultipartFile files) throws IOException{
            if (!files.isEmpty()) {
                FileUploadBean fileBean=new FileUploadBean();
                fileBean.setFile(files.getBytes());
                fileBean.setConsumerId(id);
                fileBean.setFileName(files.getOriginalFilename());

                String path= FileUploadProcess.createFile(fileBean);

                BillUpload billUpload=new BillUpload();
                billUpload.setUri(path);
                return billuploadRepository.save(billUpload);

            } else {
                return new  BillUpload();
            }

  }
  1. 这是RestController,它是将图像上传到服务器的多部分请求。
  2. 我正在尝试使用多部分请求将所选图像从图库上传到服务器。
  3. package com.example.takeimage;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.database.Cursor;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.net.Uri;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.os.Environment;
    import android.provider.MediaStore;
    import android.provider.MediaStore.MediaColumns;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ImageView;
    import org.springframework.web.client.RestTemplate;
    
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class MainActivity extends Activity implements View.OnClickListener {
    
        int REQUEST_CAMERA = 0, SELECT_FILE = 1;
        Button btnSelect;
        ImageView ivImage;
        Button btnClick;
        static String ConsumerId = " ";
    String path="";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            btnSelect = (Button) findViewById(R.id.btnSelectPhoto);
            btnSelect.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    selectImage();
                }
            });
            ivImage = (ImageView) findViewById(R.id.ivImage);
            btnClick = (Button) findViewById(R.id.btnClick);
            btnClick.setOnClickListener(this);
    
        }
    
        @Override
    
        protected void onStart() {
            super.onStart();
    
    
    
        private void selectImage() {
            final CharSequence[] items = {"Take Photo", "Choose from Library",
                    "Cancel"};
    
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("Add Photo!");
            builder.setItems(items, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int item) {
                    if (items[item].equals("Take Photo")) {
                        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        startActivityForResult(intent, REQUEST_CAMERA);
                    } else if (items[item].equals("Choose from Library")) {
                        Intent intent = new Intent(
                                Intent.ACTION_PICK,
                                MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                        intent.setType("image/*");
                        startActivityForResult(
                                Intent.createChooser(intent, "Select File"),
                                SELECT_FILE);
                    } else if (items[item].equals("Cancel")) {
                        dialog.dismiss();
                    }
                }
            });
            builder.show();
        }
    
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
            if (resultCode == Activity.RESULT_OK) {
                if (requestCode == SELECT_FILE)
                    onSelectFromGalleryResult(data);
                else if (requestCode == REQUEST_CAMERA)
                    onCaptureImageResult(data);
            }
        }
    
        private void onCaptureImageResult(Intent data) {
            Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes);
    
            File destination = new File(Environment.getExternalStorageDirectory(),
                    System.currentTimeMillis() + ".jpg");
    
            FileOutputStream fo;
            try {
                destination.createNewFile();
                fo = new FileOutputStream(destination);
                fo.write(bytes.toByteArray());
                fo.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            ivImage.setImageBitmap(thumbnail);
        }
    
        @SuppressWarnings("deprecation")
        private void onSelectFromGalleryResult(Intent data) {
            Uri selectedImageUri = data.getData();
            String[] projection = {MediaColumns.DATA};
            Cursor cursor = managedQuery(selectedImageUri, projection, null, null,
                    null);
            int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
            cursor.moveToFirst();
    
            String selectedImagePath = cursor.getString(column_index);
    
            Bitmap bm;
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeFile(selectedImagePath, options);
            final int REQUIRED_SIZE = 200;
            int scale = 1;
            while (options.outWidth / scale / 2 >= REQUIRED_SIZE
                    && options.outHeight / scale / 2 >= REQUIRED_SIZE)
                scale *= 2;
            options.inSampleSize = scale;
            options.inJustDecodeBounds = false;
            bm = BitmapFactory.decodeFile(selectedImagePath, options);
    
            ivImage.setImageBitmap(bm);
        }
    
    
        @Override
        public void onClick(View v) {
    
    
        }
    }
    
            }
    
    1. 当用户选择任何图像(来自图库或相机)时的我的MainActivity。
    2. 按下上传按钮时,所选图像必须上传到服务器。
    3. 正如我在上面添加的那样,发送请求将是多部分请求(后方法)。
    4. 任何人都可以帮助我如何做到这一点感谢他们........ 如果你有任何代码与我分享。

0 个答案:

没有答案