gpt4 book ai didi

amazon-web-services - 给定一个 S3 路径和一个有效的 key 和 secret ,我如何更新对象缓存控制 header ?

转载 作者:IT王子 更新时间:2023-10-29 02:17:15 25 4
gpt4 key购买 nike

我需要在文件上传到 S3 后更新文件的 header 。我无法控制上传过程(我正在使用 FilePicker.io API,据我所知,它不提供指定缓存控制 header 的方法),它们只是神奇地出现在存储桶中。我有对象的完整 s3 路径以及存储桶的 key 和 secret 。

使用 Go,向这些对象添加新 header 的最简单方法是什么?似乎您需要执行 PUT 复制请求,但这需要请求签名并且它会覆盖所有现有 header 。我只想添加一个缓存控制 header ,一定有更简单的方法吧?

最佳答案

下面的小程序应该简单地将缓存控制 header 添加到给定的桶/键组合。重要的一点是 s3.CopyOptions 结构。 MetadataDirective 也可以是 COPY - 参见 http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html了解详情。此外,源必须是存储桶/ key ,因为源当然可以在另一个存储桶中。

package main

import (
"fmt"
"os"

"github.com/goamz/goamz/aws"
"github.com/goamz/goamz/s3"
//// should work as well
//"github.com/crowdmob/goamz/aws"
//"github.com/crowdmob/goamz/s3"
)

func main() {
// use as
// $ go run s3meta.go bucket key
// will add a 1 hour Cache-Control header to
// key in bucket
auth := aws.Auth{
AccessKey: os.Getenv("AWS_ACCESS_KEY_ID"),
SecretKey: os.Getenv("AWS_SECRET_KEY_ID"),
}

bucketName, keyName := os.Args[1], os.Args[2]

bucket := s3.New(auth, aws.USEast).Bucket(bucketName)
opts := s3.CopyOptions{}
opts.CacheControl = "maxage=3600"
opts.MetadataDirective = "REPLACE"

_, err := bucket.PutCopy(keyName, s3.PublicRead, opts, bucketName+"/"+keyName)
if err != nil {
panic(err)
}

}

试运行(桶已被删除):

╭─brs at stengaard in ~/ using
╰─○ curl -I https://s3.amazonaws.com/cf-templates-1r14by1vl75o0-us-east-1/success.png
HTTP/1.1 200 OK
x-amz-id-2: 49oTuRARMHlx32nqv34CMOjdTMBUCZIVzP8YKBS2Wz5h1w5KBG62u8nFru1UkIbJ
x-amz-request-id: C92E9952BFF31D77
Date: Mon, 30 Jun 2014 08:57:15 GMT
Last-Modified: Mon, 30 Jun 2014 08:50:45 GMT
ETag: "41b9951893f1bbff89e2b9c8a5b7ea18"
Accept-Ranges: bytes
Content-Type: image/png
Content-Length: 61585
Server: AmazonS3

╭─brs at stengaard in ~/ using
╰─○ go run s3meta.go cf-templates-1r14by1vl75o0-us-east-1 success.png
╭─brs at stengaard in ~/ using
╰─○ curl -I https://s3.amazonaws.com/cf-templates-1r14by1vl75o0-us-east-1/success.png
HTTP/1.1 200 OK
x-amz-id-2: oiDeXjO1V4kquWo8UlNWBi/HAHoqfvlOSHVeXFZXv2yA4o0+Njcdshhu15PIiw7J
x-amz-request-id: 0BB1A397DE7EBE75
Date: Mon, 30 Jun 2014 09:00:17 GMT
Cache-Control: maxage=3600
Last-Modified: Mon, 30 Jun 2014 09:00:12 GMT
ETag: "41b9951893f1bbff89e2b9c8a5b7ea18"
Accept-Ranges: bytes
Content-Type: binary/octet-stream
Content-Length: 61585
Server: AmazonS3

请注意,Content-Type 也会发生变化,因为我们有 opts.MetadataDirective = "REPLACE"。如果这件小事值得带外更新 header 的麻烦确实是特定于域的:在客户端缓存上传的文件有多重要?对 S3 执行 HEAD 请求是否过于昂贵?

关于amazon-web-services - 给定一个 S3 路径和一个有效的 key 和 secret ,我如何更新对象缓存控制 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24460749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com