当前位置: 首页 > 知识库问答 >
问题:

使用CannedAccessController.Private生成设计请求时,S3预签名URL文件上载不起作用

羊时铭
2023-03-14

我的例子:

AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
    ClientConfiguration clientConfig = new ClientConfiguration();
    clientConfig.setProtocol(Protocol.HTTP);
    BasicAWSCredentials creds = new BasicAWSCredentials(accessKey, secretKey); 
    AmazonS3 s3client = new AmazonS3Client(credentials, clientConfig);
    Region region = Region.getRegion(Regions.EU_WEST_1);
    s3client.setRegion(region);
    s3client.setEndpoint(serverCeph);
    Bucket bucket = s3client.createBucket(bucketName);
    File file = new File(fileNameTest);
    AccessControlList acl = new AccessControlList();
    acl.grantPermission(GroupGrantee.AllUsers, Permission.FullControl);
       s3client.putObject(new PutObjectRequest(bucketName, keyObject,   file).withAccessControlList(acl));
    s3client.setObjectAcl(bucket.getName(), keyObject,CannedAccessControlList.Private);


           // Generate URL
    System.out.println("Generating pre-signed URL.");
    java.util.Date expiration = new java.util.Date();
    long milliSeconds = expiration.getTime();
    milliSeconds += 1000 * 60 * 60; // Add 1 hour.
    expiration.setTime(milliSeconds);
    GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, keyObject);
    generatePresignedUrlRequest.setMethod(HttpMethod.GET);
    generatePresignedUrlRequest.setExpiration(expiration);
    generatePresignedUrlRequest.setContentType("image/png");
    URL url = s3client.generatePresignedUrl(generatePresignedUrlRequest);
    System.out.println("Pre-Signed URL = " + url.toString());

如果我使用s3client.setObjectAcl(bucket.getName(),keyObject,CannedAccessControlList。PublicRead);然后我可以得到URL和这个工作正常但如果我使用s3client.setObjectAcl(bucket.getName(), keyObject, CannedAccessControlList.然后我可以得到URL和URL不工作

我总是收到下面的错误,当我传递到浏览器的URL。

<Error>
<Code>SignatureDoesNotMatch</Code>
<RequestId>tx000000000000000068415-0058d62341-5229e3-default</RequestId>
<HostId>5229e3-default-default</HostId>
</Error>

这是我生成的URL:

http://server:port/bucketname/keyobject?X-Amz算法=AWS4-HMAC-SHA256

有人可以有任何想法或我用来正确运行URL的方式?


共有1个答案

百里涛
2023-03-14

以防有人在寻找解决方案。

如果看到SignatureDesNotMatch,首先要检查上传文件时发送的“内容类型”标题。它的值必须与生成URL时使用的值相同。

 类似资料:
  • 我正在开发一个特性,使用Angular/预签名url和API Gateway/lambda生成预签名url将文件上传到S3。 我的工作流描述如下: 从模板中获取选定文件 请求我的api(网关/lambda)使用文件名生成预签名的URL。 const body={filename:this.selectedfile.name}const preSignedUrl=await this.http.po

  • 我正试图上传一个媒体文件(图片,任何扩展名jpg/png/jpeg或视频)到aws s3桶,从邮递员我创建了我的预签名url在我的后端如下 这成功地生成了一个url,但我似乎无法使用postman来测试它,这是我如何在postman中调整请求的截图 我所尝试的: 在上面的代码中,我尝试将签名版本v4添加到params中,但它给了我一个错误,说出了意外的关键字。我甚至尝试将其添加到aws配置和s3中

  • 我正在尝试使用预先签名的URL将文件上传到Amazon的S3。我从生成URL的服务器获取URL https://com-example-mysite.s3-us-east-1.amazonaws.com/userFolder/ImageName?X-Amz安全令牌=xxfoox///xxbarxx= 不幸的是,当我将其传递给Refught2时,它会修改试图将其转换为URL的字符串。我设置了,它解决

  • 我试图上传一个图像使用预先签名的网址 我得到了一个类似的url https://s3.eu-west-1.amazonaws.com/bucket/folder/access.JPG?AWSAccessKeyId=xxxx 我已经尝试上传文件与内容类型图像/jpg,多部分/表单数据。 尝试生成没有文件类型和上传的网址。 尝试了放后法 但似乎什么都不管用 错误总是: 我们计算的请求签名与您提供的签名

  • 这里是我的node.js预签名URL的生成 那么我在URL生成或卷曲方面的问题在哪里呢?谢谢

  • tl;dr-从浏览器向从服务器(AWS S3)获取的预签名url发出的请求获得,但以下请求获得 这是我负责AWS及其S3服务的服务器端代码: 知道我做错了什么吗?