我正在嘗試動態設定標題部分中的 x-goog-meta-reference,因此我想在函式簽名中傳遞一個名為 reference 的引數,并將其分配給標題中的 x-goog-meta-reference。請參閱x-goog-meta-reference下面的代碼示例。我關注了這個關于規范請求的鏈接。
我的示例代碼來自這里,但它是我的產品代碼的編輯版本。
func GenerateSignedURL(ctx context.Context, bucket string, key string, expiration time.Time,
) (string, error) {
gcsClient, err := storage.NewClient(ctx)
if err != nil {
return "", fmt.Errorf("storage.NewClient: %v", err)
}
defer gcsClient.Close()
storage.SignedURL()
opts := &storage.SignedURLOptions{
Scheme: storage.SigningSchemeV4,
Method: "PUT",
ContentType: "text/csv",
Headers: []string{
"x-goog-meta-reference: xxx", // << I want xxx value to be whatever I pass to this function as an arg
},
Expires: expiration,
}
url, err := gcsClient.Bucket(bucket).SignedURL(key, opts)
if err != nil {
log.WithContext(ctx).Warn("Failed to generate a GCS signed URL")
return "", err
}
return url, nil
}
我嘗試查看一些示例,但它們都是 s3 并且我沒有遇到任何 gcp 示例代碼。但是,我確實發現了這個問題,但我自己無法弄清楚。
uj5u.com熱心網友回復:
正如@dazwilkin提到的那樣,fmt.Sprintf對于這種情況來說已經足夠了,但是您也可以使用我從mozilla移植的這個庫
import (
"context"
"fmt"
"time"
"cloud.google.com/go/storage"
"github.com/dkbyo/go-stringhttpheader"
)
type Headers struct {
GoogleMetaReference string `header:"x-goog-meta-reference"`
}
func GenerateSignedURL(bucket string, key string, expiration time.Time,
) (string, error) {
ctx := context.Background()
gcsClient, err := storage.NewClient(ctx)
if err != nil {
return "", fmt.Errorf("storage.NewClient: %v", err)
}
defer gcsClient.Close()
headers := Headers{
GoogleMetaReference: "xxx",
}
fmt.Print(stringhttpheader.Encode(headers))
stringheaders, _ := stringhttpheader.Encode(headers)
//storage.SignedURL()
opts := &storage.SignedURLOptions{
Scheme: storage.SigningSchemeV4,
Method: "PUT",
ContentType: "text/csv",
Headers: stringheaders,
Expires: expiration,
}
url, err := gcsClient.Bucket(bucket).SignedURL(key, opts)
if err != nil {
log.WithContext(ctx).Warn("Failed to generate a GCS signed URL")
return "", err
}
return url, nil
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/424134.html
下一篇:我不太了解golang頻道
