簡體   English   中英

給定S3路徑以及有效的密鑰和機密,如何更新對象緩存控制標頭?

[英]Given an S3 path and a valid key and secret, how do I update an objects cache-control headers?

將文件頭上傳到S3后,我需要對其進行更新。 我沒有對上傳過程的控制權(我正在使用FilePicker.io API,該API到目前為止還沒有提供指定緩存控制標頭的方法),它們只是神奇地出現在存儲桶中。 我擁有對象的完整s3路徑以及存儲桶的密鑰和秘密。

使用Go,向這些對象添加新標題的最簡單方法是什么? 似乎您需要執行PUT復制請求,但這需要請求簽名,並且它會覆蓋所有現有的標頭。 我要做的就是添加一個緩存控制標頭,必須有一種更簡單的方法吧?

下面的小程序應該簡單地將緩存控制標頭添加到給定的存儲桶/鍵組合中。 重要的是s3.CopyOptions結構。 MetadataDirective也可以是COPY有關詳細信息,請參見http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html 源也必須是存儲桶/密鑰,因為源當然可以在另一個存儲桶中。

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

請注意,由於我們具有opts.MetadataDirective = "REPLACE" ,因此Content-Type也發生了變化。 如果這個小事情值得,帶外更新標頭的麻煩實際上是特定於域的:在客戶端中緩存上載的文件有多重要? 向S3發出HEAD請求是否昂貴?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM