首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >S3预先签名的URL上传成功,但它是空的

S3预先签名的URL上传成功,但它是空的
EN

Stack Overflow用户
提问于 2020-02-17 08:29:55
回答 1查看 1.3K关注 0票数 1

我试图将文件上传到S3,通过使用curl对url进行预处理。

当我运行以下命令时,它返回成功。

代码语言:javascript
复制
❯ curl -v -X PUT --upload-file [file directory] '[pre-sined url]'
*   Trying [port]...
* TCP_NODELAY set
* Connected to bucket-name.s3.region.amazonaws.com (ip address) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: C=US; ST=Washington; L=Seattle; O=Amazon.com, Inc.; CN=*.region.amazonaws.com
*  start date: Nov  9 00:00:00 2019 GMT
*  expire date: Dec 10 12:00:00 2020 GMT
*  subjectAltName: host "bukcet-name.s3.region.amazonaws.com" matched cert's "*.s3.region.amazonaws.com"
*  issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert Baltimore CA-2 G2
*  SSL certificate verify ok.
> PUT [pre-signed url] HTTP/1.1
> Host: bukcet-name.s3.region.amazonaws.com
> User-Agent: curl/7.64.1
> Accept: */*
> Content-Type: image/png
> Content-Length: 145701
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
* We are completely uploaded and fine
< HTTP/1.1 200 OK
< x-amz-id-2: hogehoge
< x-amz-request-id:hugahuga
< Date: Mon, 17 Feb 2020 08:09:01 GMT
< ETag: "hogehuga"
< Content-Length: 0
< Server: AmazonS3
<
* Connection #0 to host bukcet-name.s3.region.amazonaws.com left intact
* Closing connection 0

但是当我看到S3时,文件是不上传的。

我想知道如何正确上传文件到S3。

更新

我以curl格式添加了x-amz-acl: bucket-owner-full-control头,并在S3桶CORS中设置了<AllowedHeader>x-amz-acl</AllowedHeader>

代码语言:javascript
复制
curl -v -X PUT -H 'x-amz-acl: bucket-owner-full-control' --upload-file [file directory] '[pre-sined url]'

但它会返回错误。<Error><Code>AccessDenied</Code><Message>There were headers present in the request which were not signed</Message><HeadersNotSigned>x-amz-acl</HeadersNotSigned>

另外,我想知道我预先签名的url在直接路径中没有文件名。这是正确的预先签署的网址?

我生成预签名url的工具如下所示:

代码语言:javascript
复制
    req, _ := svc.PutObjectRequest(&s3.PutObjectInput{
        Bucket: aws.String(bucketName),
        Key:    aws.String(key),
    })
    url, err := req.Presign(expires)

我需要在PutObjectInput结构中添加ACL吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-19 20:11:02

当生成文件名时,通过在s3目录的末尾添加文件名来解决这个问题。

例如(Golang):

代码语言:javascript
复制
    req, _ := svc.PutObjectRequest(&s3.PutObjectInput{
        Bucket: aws.String("hogehoge/fugafuga/filename"),
        Key:    aws.String(key),
    })
    url, err := req.Presign(expires)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60258486

复制
相关文章

相似问题

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