- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我需要在文件上传到 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/
我是一名优秀的程序员,十分优秀!