upload captured image to Cloudinary directly in Android

后端 未结 1 1256
旧巷少年郎
旧巷少年郎 2020-12-30 14:03

I want to capture a picture and upload it to Cloudinary directly. How can I know the name of the pic to set it at the upload statement cloudinary.uploader().upload(\"n

相关标签:
1条回答
  • 2020-12-30 14:22

    The order is like this: Take picture->save to file->upload to cloudinary Here is the code:

    File photoFile;
    
         @Override
            public void onClick(View v) {
                Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                if (takePhotoIntent.resolveActivity(getPackageManager()) != null) {
                    // Create the File where the photo should go
                    photoFile = null;
                    try {
                        photoFile = createImageFile();
                    } catch (IOException ex) {
                        // Error occurred while creating the File
                    }
                    // Continue only if the File was successfully created
                    if (photoFile != null) {
                        takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                                Uri.fromFile(photoFile));
                        startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
                    }
                }
            }
    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
            if (requestCode == REQUEST_TAKE_PHOTO) {
                if (resultCode == RESULT_OK) {
                    //File to upload to cloudinary
                    Map config = new HashMap();
                    config.put("cloud_name", "dkepfkeuu");
                    config.put("api_key", "552563677649679");
                    config.put("api_secret", "7n8wJ42Hr_6nqZ4aOMDXjTIZ4P0");
                    Cloudinary cloudinary = new Cloudinary(config);
                    try {
                        cloudinary.uploader().upload(photoFile.getAbsolutePath(),          Cloudinary.emptyMap());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
    
                } else if (resultCode == RESULT_CANCELED) {
                    // User cancelled the image capture
                    //finish();
                }
            }
        }
    
        private File createImageFile() throws IOException {
                // Create an image file name
                String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
                String imageFileName = "capturedImage";
                File storageDir = Environment.getExternalStoragePublicDirectory(
                        Environment.DIRECTORY_PICTURES);
                File image = File.createTempFile(
                        imageFileName,  /* prefix */
                        ".jpg",         /* suffix */
                        storageDir      /* directory */
                );
    
                // Save a file: path for use with ACTION_VIEW intents
                return image;
            }
    

    So you are actually uploading photoFile which is the actually captured image.

    Its nice to put the upload function along with some image transformations(scale,resize) in AsyncTask because camera images in modern handsets are quite big(in size).

    Hope it helps.

    0 讨论(0)
提交回复
热议问题