[英]How to upload an image to Amazon s3 bucket using Java in Android?
[英]What is the right way to upload image to amazon s3 in android?
我使用了以下方式将图像上传到亚马逊s3。 但我无法在这方面取得成功。
public UploadAmazon() {
s3Client = new AmazonS3Client(new BasicAWSCredentials(MY_ACCESS_KEY_ID,MY_SECRET_KEY));
s3Client.createBucket(pictureBucket);
s3Client.setBucketAcl(pictureBucket, CannedAccessControlList.valueOf("private"));
uploadFile();
}
public void uploadFile() {
PutObjectRequest por = new PutObjectRequest(pictureBucket,"images/"+fileName,new File(fileURI));
PutObjectResult result = s3Client.putObject(por);
}
当这样尝试我得到跟随错误
E/AndroidRuntime(31827): FATAL EXCEPTION: AsyncTask #1
E/AndroidRuntime(31827): Process: com.xxx.yyy.zzz, PID: 31827
E/AndroidRuntime(31827): java.lang.RuntimeException: An error occured while executing doInBackground()
E/AndroidRuntime(31827): at android.os.AsyncTask$3.done(AsyncTask.java:300)
E/AndroidRuntime(31827): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
E/AndroidRuntime(31827): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
E/AndroidRuntime(31827): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
E/AndroidRuntime(31827): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
E/AndroidRuntime(31827): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
E/AndroidRuntime(31827): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
E/AndroidRuntime(31827): at java.lang.Thread.run(Thread.java:841)
E/AndroidRuntime(31827): Caused by: com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 123456789), S3 Extended Request ID: XXXXXXXXXXXXXX
E/AndroidRuntime(31827): at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(Unknown Source)
E/AndroidRuntime(31827): at com.amazonaws.http.AmazonHttpClient.executeHelper(Unknown Source)
E/AndroidRuntime(31827): at com.amazonaws.http.AmazonHttpClient.execute(Unknown Source)
E/AndroidRuntime(31827): at com.amazonaws.services.s3.AmazonS3Client.invoke(Unknown Source)
E/AndroidRuntime(31827): at com.amazonaws.services.s3.AmazonS3Client.createBucket(Unknown Source)
E/AndroidRuntime(31827): at com.amazonaws.services.s3.AmazonS3Client.createBucket(Unknown Source)
E/AndroidRuntime(31827): at com.xxx.yyy.zzz.ftp.UploadAmazon.<init>(UploadAmazon.java:37)
E/AndroidRuntime(31827): at com.xxx.yyy.zzz.NewMessageFragment$Uploading.doInBackground(NewMessageFragment.java:859)
E/AndroidRuntime(31827): at com.xxx.yyy.zzz.NewMessageFragment$Uploading.doInBackground(NewMessageFragment.java:855)
E/AndroidRuntime(31827): at android.os.AsyncTask$2.call(AsyncTask.java:288)
E/AndroidRuntime(31827): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
E/AndroidRuntime(31827): ... 4 more
找到了方法。
AWSCredentials credentials = new BasicAWSCredentials(MY_ACCESS_KEY_ID,MY_SECRET_KEY);
TransferManager manager = new TransferManager(credentials);
Upload upload = manager.upload(pictureBucket,"images/"+fileName,new File(fileURI));
这样做..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.