簡體   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