【问题标题】:What is the right way to upload image to amazon s3 in android?在android中将图像上传到亚马逊s3的正确方法是什么?
【发布时间】: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


【解决方案1】:

找到路了。

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

这样就可以了..

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 2015-11-05
    相关资源
    最近更新 更多