亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Go 中使用帶有自定義標頭的 gcp 簽名 url

如何在 Go 中使用帶有自定義標頭的 gcp 簽名 url

Go
catspeake 2022-11-08 15:43:56
我正在嘗試動態設置標題部分中的 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 示例代碼。但是,我確實發現了這個問題,但我自己無法弄清楚。
查看完整描述

1 回答

?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

正如@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

}


查看完整回答
反對 回復 2022-11-08
  • 1 回答
  • 0 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號