3 回答

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊
看起來庫希望提供者之間的任何不一致都作為BeforeWrite回調(diào)提供:
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)
警告:我完全沒有測(cè)試這段代碼,但它成功了,所以它應(yīng)該可以工作?
我會(huì)警告你,由于這些類型的原因,這個(gè)庫似乎處于 alpha 階段。依賴這種變通方法會(huì)導(dǎo)致您在嘗試為所有云提供商重用它時(shí)遇到問題。最后,我建議只使用提供的 SDK 實(shí)現(xiàn)您想要的功能,并利用工廠/適配器模式為給定調(diào)用檢索正確的適配器。

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊
在桶/容器級(jí)別設(shè)置 ACL 可能是正確的做法。設(shè)置每個(gè) blob ACL 可能難以有效管理。在某些 blob 存儲(chǔ)提供商(AWS S3、GCS)上是可能的,但在其他提供商(Azure)上則不行,因此 Go Cloud 尚未添加對(duì)它的支持。此外,所有 3 個(gè)提供商(和 Go Cloud)都支持“簽名 URL”功能,您作為資源的所有者可以創(chuàng)建一個(gè) URL,在有限的時(shí)間內(nèi)提供對(duì)其的公共讀取訪問權(quán)限。

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
提供者之間的任何不一致都將作為 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,
})
- 3 回答
- 0 關(guān)注
- 196 瀏覽