Android 中 Amazon S3 预签名 URL 的改进
Posted
技术标签:
【中文标题】Android 中 Amazon S3 预签名 URL 的改进【英文标题】:Improvements for the AmazonS3 presignedURL in Android 【发布时间】:2021-12-26 05:48:50 【问题描述】:我正在为带有 Cognito 的 AmazonS3 presignedURL 寻找一些改进和建议。我注意到有时到期日期比设置的要早。这会导致错误“意外响应代码 400”。
MainActivity.java
// Amazon S3
private AmazonS3 amazonS3;
public AmazonS3 getAmazonS3()
return amazonS3;
public void setAmazonS3(AmazonS3 amazonS3)
this.amazonS3 = amazonS3;
@Override
protected void onCreate(Bundle savedInstanceState)
// AWS
RunnableAWSS3 runnableAWSS3 = new RunnableAWSS3(activity);
Thread thread = new Thread(runnableAWSS3);
thread.start();
thread.join();
// Getting the JSON data stored in S3 bucket
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, runnableAWSS3.getPresignedURL(), null, response ->
...
);
RunnableAWSS3.java
public class RunnableAWSS3 implements Runnable
private final ActivityMain activityMain;
private URL presignedURL;
public RunnableAWSS3(@NonNull Activity activity)
activityMain = (ActivityMain) activity;
@Override
public void run()
if (activityMain.getAmazonS3() == null)
// AWS
// Initialize the Amazon Cognito credentials provider
CognitoCachingCredentialsProvider cognitoCachingCredentialsProvider = new CognitoCachingCredentialsProvider(
activityMain,
"us-east-1:xxxxxxxxxxxxxxxxxxxxxxxxx",
Regions.US_EAST_1
);
activityMain.setAmazonS3(new AmazonS3Client(cognitoCachingCredentialsProvider, Region.getRegion(Regions.US_EAST_1)));
// Set the presigned URL to expire after twelve hours.
presignedURL = activityMain.getAmazonS3().generatePresignedUrl(
"xxxxxxxxxxxxxxxxxxxxxxxx",
"xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
new Date(System.currentTimeMillis() + 43200000));
public String getPresignedURL()
return presignedURL.toString();
有时我收到错误 E/Volley: [200] NetworkUtility.shouldRetryException: Unexpected response code 400 for ... 获取预签名 URL。
我希望能提供一些改进建议。
【问题讨论】:
【参考方案1】:预签名 URL 会根据其签名方式限制过期时间。对于像 cognito 这样的临时凭证,与使用 IAM 凭证签署时相比,它的到期时间要短得多。一旦 cognito 用户的会话过期,您的预签名网址就会过期。
https://aws.amazon.com/premiumsupport/knowledge-center/presigned-url-s3-bucket-expiration/
【讨论】:
以上是关于Android 中 Amazon S3 预签名 URL 的改进的主要内容,如果未能解决你的问题,请参考以下文章
Amazon S3 预签名 URL - 手动或一次性上传无效
如何使用 amazon sdk 为虚域生成预签名的 Amazon S3 url?
使用预签名 URL 上传到 Amazon S3 时限制对象大小