首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AWS S3 CreatePresignedPost不生成某些必需的字段

AWS S3 CreatePresignedPost不生成某些必需的字段
EN

Stack Overflow用户
提问于 2020-05-09 14:58:31
回答 1查看 2.6K关注 0票数 2

我正在尝试生成一个预先签名的post,以授予浏览器从桶中上传/删除特定文件的权限,但是createPresignedPost似乎没有生成一些必需的字段。getSignedUrl工作。

代码语言:javascript
运行
复制
      const signedUrl = await new Promise<PresignedPost>( (resolve, reject) => {
        this.s3.createPresignedPost({
          Bucket: this.env.config.s3.buckets.images,
          Fields: { key },
          Conditions: [
            ["content-length-range", 0, 10 * 1024 * 1024]
          ],
          Expires: 3600,
        }, (err, preSigned) => { if (err) { reject(err) } else { resolve(preSigned) }});
      });

      // This works, but doesn't allow the object to be deleted, and does not allow setting a maximum file size
      //
      // const rawUrl = new URL(await this.s3.getSignedUrlPromise('putObject', {
      //     Bucket: this.env.config.s3.buckets.images,
      //     Key: key,
      //     Expires: 3600,
      // }));
      //
      // const signedUrl = {
      //   url: rawUrl.origin + rawUrl.pathname,
      //   fields: Object.fromEntries(Array.from(rawUrl.searchParams.entries()))
      // };

createPresignedPost生成:

代码语言:javascript
运行
复制
{ 
  url: 'https://s3.eu-west-3.amazonaws.com/xxx-images',
  fields: { 
    key: 'incoming/ae83pfxu7kf4dfdv4hbvorsxq31hadtjcp97ehwt30ds5',
    bucket: 'xxx-images',
    'X-Amz-Algorithm': 'AWS4-HMAC-SHA256',
    'X-Amz-Credential': 'xxx',
    'X-Amz-Date': '20200509T145014Z',
    Policy:    
 'eyJleHBpcmF0aW9uIjoiMjAyMC0wNS0wOVQxNTo1MDoxNFoiLCJjb25kaXRpb25zIjpbWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsMCwxMDQ4NTc2MF0seyJrZXkiOiJpbmNvbWluZy9hZTgzcGZ4dTdrZjRkZmR2NGhidm9yc3hxMzFoYWR0amNwOTdlaHd0MzBkczUifSx7ImJ1Y2tldCI6InByZWZsaWdodGVtYWlsLWltYWdlcyJ9LHsiWC1BbXotQWxnb3JpdGhtIjoiQVdTNC1ITUFDLVNIQTI1NiJ9LHsiWC1BbXotQ3JlZGVudGlhbCI6IkFLSUE1RE5UN0lOWjJKTU5TQVhILzIwMjAwNTA5L2V1LXdlc3QtMy9zMy9hd3M0X3JlcXVlc3QifSx7IlgtQW16LURhdGUiOiIyMDIwMDUwOVQxNDUwMTRaIn1dfQ==',
    'X-Amz-Signature': 'xxx' } }

尝试使用这些参数放置一个文件会给出如下结果:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>AuthorizationQueryParametersError</Code>
  <Message>Query-string authentication version 4 requires the X-Amz-Algorithm, X-Amz-Credential, X-Amz-Signature, X-Amz-Date, X-Amz-SignedHeaders, and X-Amz-Expires parameters.</Message> 
 <RequestId>xxx</RequestId> 
 <HostId>xxx</HostId>
</Error>

旧的API调用生成缺失的“X SignedHeaders”,以及“X到期”参数。

有人能帮我解决我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-09 15:00:50

您应该使用POST而不是PUT,因为您正在使用createPresignedPost生成URL。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61698769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档