![](/img/trans.png)
[英]How to upload an object using presigned URL along with tags in s3 aws-sdk-ruby v3
[英]AWS Java SDK 2.0 S3 presigned URL public object access
為文件上傳本身創建預簽名 url 工作正常。 但是默認情況下通過生成的 URL 上傳文件會使它成為私有的,因此不能通過它的 URL 訪問
我必須手動將 go 發送到控制台並公開文件以便從它的 URL 訪問
這是我的代碼
String bucketName = "<bucket-name>";
String keyName = "<file-name>";
S3Presigner presigner = S3Presigner.builder().region(Region.AP_SOUTH_1).build();
PutObjectRequest objectRequest = PutObjectRequest.builder()
.bucket(bucketName)
.key(keyName)
.build();
PutObjectPresignRequest presignRequest = PutObjectPresignRequest.builder()
.signatureDuration(Duration.ofMinutes(3))
.putObjectRequest(objectRequest)
.build();
PresignedPutObjectRequest presignedRequest = presigner.presignPutObject(presignRequest);
System.out.println("Pre-signed URL to upload a file to: " +
presignedRequest.url());
System.out.println("Which HTTP method needs to be used when uploading a file: " +
presignedRequest.httpRequest().method());
presigner.close();
在 NodeJs 中,我們指定我們希望該文件可公開訪問,所以我發現它是 java sdk 等價物,如下所示
PutObjectRequest objectRequest = PutObjectRequest.builder()
.bucket(bucketName)
.key(keyName)
.acl(ObjectCannedACL.PUBLIC_READ)
.build();
但是當通過由此生成的 URL 上傳時,出現簽名不匹配錯誤
The request signature we calculated does not match the signature you provided. Check your key and signing method
我究竟做錯了什么? 使文件可公開訪問不是正確的方法嗎? 如果沒有,我應該怎么做?
我在 AWS 的 github 上針對 java-sdk 發布了同樣的問題並找到了解決方案。
在.acl(ObjectCannedACL.PUBLIC_READ)
將在PutObjectRequest.builder()
中添加x-amz-acl
,而不是在需要它的查詢中
這是將其添加到查詢中的方法
AwsRequestOverrideConfiguration override = AwsRequestOverrideConfiguration.builder()
.putRawQueryParameter("x-amz-acl", "private")
.build();
PutObjectRequest putObjectRequest = PutObjectRequest.builder()
.bucket(bucketName)
.key(keyName)
.overrideConfiguration(override)
.build();
該解決方案完美無缺。 認為它也可能對其他人有幫助
有關詳細信息,請參閱github
這應該可以解決問題:
new PutObjectRequest("xxx", "xxx, fis, metadata).withCannedAcl(CannedAccessControlList.PublicRead));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.