上傳頭像及上傳到Tomcat 服務器

                              github源碼地址:https://github.com/15565201312/UploadPicturesDemo.git

https://github.com/15565201312/UploadPicturesDemo.git
https://github.com/15565201312/UploadPicturesDemo.git
https://github.com/15565201312/UploadPicturesDemo.git

1.首先調用使用隱式Intent 獲取本機相機

Intent it = new Intent();
it.setAction(MediaStore.ACTION_IMAGE_CAPTURE);

file = new File(Environment.getExternalStorageDirectory().getPath(), "h"+(++a)+".png");
imageUri = Uri.fromFile(file);
// 以鍵值對的形式告訴系統照片保存的地址,鍵的名稱不能隨便寫
it.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

// 使用該API,it所對應的Activity銷燬時會回調MainActivity的onActivityResult方法
// 第二個參數就是一個請求碼,當有多個startActivityForResult方法的時候,就在onActivityResult用請求碼判斷是哪個Activity返回的數據
startActivityForResult(it, TAKE_PHOTO);
public class MainActivity extends AppCompatActivity {
    private final int IMAGE_REQUEST_CODE = 0;
    private final int RESIZE_REQUEST_CODE=3;
    private ImageView img;
    private LinearLayout linear;
    private PopupWindow window;
    private Uri imageUri;
    private final int CUT_PHOTO=2;
    private final int TAKE_PHOTO=1;
    private File file;
    private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
    private  int a=1;
    private final OkHttpClient client = new OkHttpClient();
    private List<String> mImgUrls=new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
    }

    private void initData() {

        img.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {

                View view1 = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_popu, null);
                TextView pai = view1.findViewById(R.id.text_pai);
                TextView xiang = view1.findViewById(R.id.text_xiang);
                TextView no= view1.findViewById(R.id.text_no);

                pai.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        // 啓動系統提供的拍照Activity
                        Intent it = new Intent();
                        it.setAction(MediaStore.ACTION_IMAGE_CAPTURE);

                        file = new File(Environment.getExternalStorageDirectory().getPath(), "h"+(++a)+".png");
                        imageUri = Uri.fromFile(file);
                        // 以鍵值對的形式告訴系統照片保存的地址,鍵的名稱不能隨便寫
                        it.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

                        // 使用該API,it所對應的Activity銷燬時會回調MainActivity的onActivityResult方法
                        // 第二個參數就是一個請求碼,當有多個startActivityForResult方法的時候,就在onActivityResult用請求碼判斷是哪個Activity返回的數據
                        startActivityForResult(it, TAKE_PHOTO);

                        window.dismiss();

                    }
                });

                xiang.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent intent = new Intent(
                                Intent.ACTION_PICK,
                                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                                 // 打開手機相冊,設置請求碼
                                  startActivityForResult(intent, IMAGE_REQUEST_CODE);
                    }
                });

                no.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        window.dismiss();
                    }
                });
                window = new PopupWindow(view1, GridLayout.LayoutParams.MATCH_PARENT, GridLayout.LayoutParams.WRAP_CONTENT);

                window.setBackgroundDrawable(new BitmapDrawable());
                window.setFocusable(true);
                window.setAnimationStyle(R.style.mymiao);
                window.showAtLocation(linear, Gravity.BOTTOM,0,0);

            }
        });

    }

    private void initView() {
        img = (ImageView) findViewById(R.id.img);
        linear = (LinearLayout) findViewById(R.id.linear);

    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        //在相冊裏面選擇好相片之後調回到現在的這個activity中
        switch (requestCode) {
            case IMAGE_REQUEST_CODE:
                resizeImage(data.getData());
                    Glide.with(this)
                            .load(data.getData())
                            .bitmapTransform(new CropCircleTransformation(this))
                            .into(img);

                //使用工具類拿到本機相冊
                String realPathFromUri = RealPathFromUriUtils.getRealPathFromUri(this, data.getData());
                System.out.println("------------1>"+realPathFromUri);

                mImgUrls.add(realPathFromUri);
                uploadImg();
                    window.dismiss();
                break;
            case TAKE_PHOTO:

                // 如果發現拍照成功,則會再次構建出一個Intent對象,並把它的action指定爲
                // com.android.camera.action.CROP。
                // 這個Intent是用於對拍出的照片進行裁剪的,因爲攝像頭拍出的照片都比較大,
                // 而我們可能只 希望截取其中的一小部分。
                // 然後給這個Intent設置一些必要的屬性,並再次調用startActivityForResult()來啓動裁剪程序。
                // 裁剪完成後的照片同時會輸出到h1.jpg中。
                Intent intent = new Intent("com.android.camera.action.CROP");
                intent.setDataAndType(imageUri, "image/*");
                intent.putExtra("scale", true);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
                startActivityForResult(intent, CUT_PHOTO);// 啓動裁剪程序

                break;
            case CUT_PHOTO:

                // 發送通知,通知媒體數據庫更新URL,否則圖庫無法顯示圖片
                Intent it = new Intent();
                it.setAction(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                it.setData(imageUri);
                sendBroadcast(it);

                // 裁剪完程序後,將圖片顯示在屏幕上
                Bitmap bitmap = BitmapFactory.decodeFile(file.getPath());
                img.setImageBitmap(bitmap);
                //拍照的圖片上傳
                mImgUrls.add(file.getPath());

                uploadImg();
              /*  Glide.with(this)
                        .load(bitmap)
                        .bitmapTransform(new CropCircleTransformation(this))
                        .into(img);*/
                break;
        }
        }
    //這裏增加裁剪
    public void resizeImage(Uri uri) {
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");
        intent.putExtra("crop", "true");
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        //裁剪的大小
        intent.putExtra("outputX", 150);
        intent.putExtra("outputY", 150);
        intent.putExtra("return-data", true);
        //設置返回碼
        startActivityForResult(intent, RESIZE_REQUEST_CODE);
    }


    private void uploadImg() {

        // mImgUrls爲存放圖片的url集合

      //  mImgUrls.add(Environment.getExternalStorageDirectory().getAbsolutePath()+"/a.png");

        MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
        for (int i = 0; i < mImgUrls.size(); i++) {
            File f = new File(mImgUrls.get(i));
            if (f != null) {
                builder.addFormDataPart("img", f.getName(), RequestBody.create(MEDIA_TYPE_PNG, f));
            }
        }

        //添加其它信息
//        builder.addFormDataPart("time",takePicTime);
//        builder.addFormDataPart("mapX", SharedInfoUtils.getLongitude());
//        builder.addFormDataPart("mapY",SharedInfoUtils.getLatitude());
//        builder.addFormDataPart("name",SharedInfoUtils.getUserName());


        MultipartBody requestBody = builder.build();
        //構建請求
        Request request = new Request.Builder()
                .url("http://192.168.0.107:8080/UploadDemo4/UploadFile")//地址
                .post(requestBody)//添加請求體
                .build();

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

                System.out.println("上傳失敗:e.getLocalizedMessage() = " + e.getLocalizedMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                System.out.println("上傳照片成功:response = " + response.body().string());

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this, "上傳成功


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章