java - 如何在 Java SDK 2.0 中构建用于文件上传的 Amazon S3 Presigned PostPolicy?

标签 java amazon-web-services amazon-s3 file-upload aws-java-sdk-2.x

我需要生成一个 AWS Signature v4 签名以上传到 s3,如下所示: https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html .

我试了很多例子,都报错

<Error>
    <Code>InvalidAccessKeyId</Code>
    <Message>The AWS Access Key Id you provided does not exist in our records.</Message>
    <AWSAccessKeyId>ASIA2AKMADUN</AWSAccessKeyId>
    <RequestId>E68a1B73B15</RequestId>
    <HostId>fIG19S=</HostId>
</Error>

我尝试使用 minio-java 构建签名,像这样 https://github.com/minio/minio-java/blob/master/examples/PresignedPostPolicy.java

此外,我尝试了这段代码片段 https://gist.github.com/phstudy/3523576726d74a0410f8

附言我的真正目标是从具有文件大小限制的客户端上传文件,例如 there ,或者有there .我可以创建 presignS3UploadLink , 但无法设置最大尺寸。

最佳答案

所以,解决方案 https://github.com/minio/minio-java/blob/master/examples/PresignedPostPolicy.java没有工作,因为缺少 x-amz-security-token 参数。

我们需要使用 session-token(我们从亚马逊获得)来创建 POST-Policy 和表单发布 - https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-HTTPPOSTConstructPolicy.html

minio 示例代码:

conditions.add(new String[]{"eq", "$x-amz-security-token", sessionToken});
formData.put("x-amz-security-token", sessionToken);

附言x-amz-security-token 是必需的,因为使用了临时安全凭证 - https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html

关于java - 如何在 Java SDK 2.0 中构建用于文件上传的 Amazon S3 Presigned PostPolicy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54220993/

相关文章:

java - 无法上传 aws 设备场中的项目

javascript - 将 Javascript 参数传递给 Node.js

java - Apache Ignite 二进制类型失效

amazon-web-services - 无法查看云信息中下载的文件

java - 用 | 分割字符串java中的分隔符

amazon-web-services - AWS : Clone RDS for separate EB instance

amazon-s3 - 文件被覆盖或删除时的 S3 通知

ruby - 使用 Ruby 写入 AWS S3 预签名 url

Java-在两个特殊字符之间提取字符串的一部分

java - 为什么 Tomcat 8 不会在创建后立即将 session 持久保存到数据存储区?