【问题标题】:Capture an image and upload it to aws s3 from Android捕获图像并将其从 Android 上传到 aws s3
【发布时间】:2020-12-04 09:44:18
【问题描述】:

我正在尝试从相机捕获图像并将其上传到 aws s3。图像被捕获并显示。但是在触摸上传图片按钮时,尽管没有显示错误,但它无法上传。 The progress dialog also doesn't close.

日志中没有显示错误:

2020-08-14 18:56:22.425 32492-32520/com.example.photosaver I/mple.photosave: Waiting for a blocking GC ProfileSaver
2020-08-14 18:56:22.470 32492-32520/com.example.photosaver I/mple.photosave: WaitForGcToComplete blocked ProfileSaver on HeapTrim for 45.371ms
2020-08-14 18:56:22.485 32492-32520/com.example.photosaver I/mple.photosave: ProcessProfilingInfo new_methods=0 is saved saved_to_disk=0 resolve_classes_delay=8000
2020-08-14 18:56:26.759 32492-32492/com.example.photosaver W/Activity: Slow Operation: Activity com.example.photosaver/.MainActivity onActivityResult took 269ms
2020-08-14 18:56:26.783 32492-32502/com.example.photosaver W/System: A resource failed to call close. 
2020-08-14 18:56:28.921 32492-32492/com.example.photosaver V/S3Uploader: Upload file: /storage/emulated/0/Android/data/com.example.photosaver/files/Pictures/JPEG_20200814_185616_7789832864562633640.jpg
2020-08-14 18:56:28.921 32492-32492/com.example.photosaver V/MainActivity: initUpload successful
2020-08-14 18:56:28.921 32492-32492/com.example.photosaver V/S3Uploader: setUploadDone

上传功能,点击上传图片按钮调用:

private void uploadImageTos3(Uri imageUri) {
        //final String path = getFilePathFromURI(imageUri);
        final String path = mCurrentPhotoPath;
        if (path != null) {
            showLoading();//uploading image..
            //call initUpload - sets file to upload
            s3uploaderObj.initUpload(path);

            Log.v("MainActivity", "initUpload successful" );
            s3uploaderObj.setOns3UploadDone(new S3Uploader.S3UploadInterface() {
                @Override
                public void onUploadSuccess(String response) {
                    Log.v("MainActivity", "OnUploadSuccess" );
                    if (response.equalsIgnoreCase("Success")) {

                        hideLoading();
                        urlFromS3 = S3Utils.generates3ShareUrl(getApplicationContext(), path);
                        if(!TextUtils.isEmpty(urlFromS3)) {
                            Toast.makeText(MainActivity.this, "Uploaded Successfully!!", Toast.LENGTH_SHORT).show();
                        }
                    }
                }
                @Override
                public void onUploadError(String response) {
                    hideLoading();
                    Log.e("MainActivity", "Error Uploading");

                }
            });
        }else{
            Toast.makeText(this, "Null Path", Toast.LENGTH_SHORT).show();
        }
    }

S3Uploader.java 中的函数 -

private Context context;
    private TransferUtility transferUtility;
    public S3UploadInterface s3UploadInterface;

    public S3Uploader(Context context) {
        this.context = context;
        transferUtility = AmazonUtil.getTransferUtility(context);

    }

    public void initUpload(String filePath) {


        File file = new File(filePath);
        ObjectMetadata myObjectMetadata = new ObjectMetadata();
        myObjectMetadata.setContentType("image/png");
        String mediaUrl = file.getName();
        TransferObserver observer = transferUtility.upload(AWSKeys.BUCKET_NAME, mediaUrl,
                file, CannedAccessControlList.PublicRead);
        observer.setTransferListener(new UploadListener());

        Log.v(TAG, "Upload file: "+filePath);
    }

public void setOns3UploadDone(S3UploadInterface s3UploadInterface) {

        this.s3UploadInterface = s3UploadInterface;
        Log.v(TAG, "setUploadDone");
    }

    public interface S3UploadInterface {
        void onUploadSuccess(String response);

        void onUploadError(String response);

    }

【问题讨论】:

    标签: android amazon-web-services amazon-s3 file-upload


    【解决方案1】:

    请看Documentation

    您可以使用以下方法将图像上传到s3。

    Amplify.Storage.uploadFile(
                    "your filename",
                    path,
                    result -> {
                        hideLoading();
                        Log.i("MyAmplifyApp", "Image Successfully uploaded: " + result.getKey());      
                    },
                    storageFailure -> {
                        hideLoading();
                        Log.e("MyAmplifyApp", "Image Upload failed", storageFailure);
                    }
            );
    

    【讨论】:

      猜你喜欢
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 2021-12-07
      • 1970-01-01
      • 2017-01-29
      • 2018-05-12
      相关资源
      最近更新 更多