【发布时间】:2015-04-18 00:10:18
【问题描述】:
我使用以下方式将图像上传到亚马逊 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
我推荐了here,但没有成功。帮助预测。提前致谢
【问题讨论】:
-
问题显然是你不能写到那个位置。您是否检查过存储桶权限和政策?
-
@cigno5.5 这是我的第一次尝试。请以正确的方式指导我。我有 access_key、secret_key、bucket、accessmode。我还需要使用什么。如果这些足够了,我该如何进一步使用它们?
-
您已经访问过aws.amazon.com/console 了吗?在那里,您可以从 aws 设置有关服务的所有内容。有很多方法可以配置权限,但您应该直接在控制台上尝试作为第一步
标签: java android amazon-s3 amazon image-upload