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

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

如何使用 go-cloud s3blob 設置公共讀???

如何使用 go-cloud s3blob 設置公共讀???

Go
阿波羅的戰車 2023-06-01 14:18:52
我遵循了go-cloud 教程,并且成功地將文件寫入了我的 S3 存儲桶。但是我如何設置 ACL: s3.ObjectCannedACLPublicRead aka public-read aka work readable permissions on that object?!遺憾的是,我的解決方法是為基于 gocloud.dev/blob/s3blob 的項目設置公共存儲桶策略。
查看完整描述

3 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

看起來庫希望提供者之間的任何不一致都作為BeforeWrite回調提供:


opts := &blob.WriterOptions{}

opts.BeforeWrite(func(i interface{}) bool {

    p, ok := i.(*s3manager.UploadInput)

    if !ok {

        return false

    }

    p.ACL = aws.String("public-read")

    return true

})


w, err := b.NewWriter(ctx, "feeds/index.html", opts)

警告:我完全沒有測試這段代碼,但它成功了,所以它應該可以工作?


我會警告你,由于這些類型的原因,這個庫似乎處于 alpha 階段。依賴這種變通方法會導致您在嘗試為所有云提供商重用它時遇到問題。最后,我建議只使用提供的 SDK 實現您想要的功能,并利用工廠/適配器模式為給定調用檢索正確的適配器。


查看完整回答
反對 回復 2023-06-01
?
弒天下

TA貢獻1818條經驗 獲得超8個贊

在桶/容器級別設置 ACL 可能是正確的做法。設置每個 blob ACL 可能難以有效管理。在某些 blob 存儲提供商(AWS S3、GCS)上是可能的,但在其他提供商(Azure)上則不行,因此 Go Cloud 尚未添加對它的支持。此外,所有 3 個提供商(和 Go Cloud)都支持“簽名 URL”功能,您作為資源的所有者可以創建一個 URL,在有限的時間內提供對其的公共讀取訪問權限。



查看完整回答
反對 回復 2023-06-01
?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

提供者之間的任何不一致都將作為 BeforeWrite 提供。


b, err := s3blob.OpenBucket(ctx, bucket, s, nil)

    if err != nil {

        return

    }

    before := func(asFunc func(interface{}) bool) error {

        req := &s3manager.UploadInput{}

        ok := asFunc(&req)

        if !ok {

            return errors.New("invalid s3 type")

        }

        req.ACL = aws.String(acl)

        return nil

    }

    w, err := b.NewWriter(ctx, appendTime(fileName), &blob.WriterOptions{

        ContentType: forceContentTypeByExtension(fileName),

        BeforeWrite: before,

    })


查看完整回答
反對 回復 2023-06-01
  • 3 回答
  • 0 關注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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