[英]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.