繁体   English   中英

捕获图像并将其从 Android 上传到 aws s3

[英]Capture an image and upload it to aws s3 from Android

我正在尝试从相机捕获图像并将其上传到 aws s3。 图像被捕获并被显示。 但是在触摸上传图片按钮时,尽管没有显示错误,但它无法上传。 进度对话框也不会关闭。

日志中没有显示错误:

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

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

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

    }

请查看文档

您可以使用以下方法将图像上传到 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);
                }
        );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM