2 回答

TA貢獻1853條經驗 獲得超18個贊
嘗試使用 AWS S3 下載管理器,它可以讓您直接下載圖像,其中包含上傳到 aws s3 的圖像的元數據和位置
buff := &aws.WriteAtBuffer{}
s3dl := s3manager.NewDownloader(sess)
_, err := s3dl.Download(buff, &s3.GetObjectInput{
Bucket: aws.String(bucket),
Key: aws.String(key),
})
if err != nil {
log.Printf("Could not download from S3: %v", err)
}
使用s3Output.Body
將為您提供輸出,因為它已經以字節為單位包含上傳的文件內容。因此,您需要在將圖像轉換為字節后使用圖像創建一個緩沖區。該函數png.Decode
在 io.Reader 上的工作方式為:
func Decode(r io.Reader) (image.Image, error)
Decode 從 r 中讀取 PNG 圖像并將其作為 image.Image 返回。返回的圖像類型取決于 PNG 內容。
檢查此示例,其中 Base64 代碼使用png.Decode
.
AWS S3 提供了專門的下載管理器來直接從存儲桶中下載文件。有關詳細信息,請檢查 AWS S3 基本存儲桶操作

TA貢獻1859條經驗 獲得超6個贊
事實證明,讀者會改變image.DecodeConfig
所以如果我使用
imgFormat := bytes.NewReader(buf.Bytes())
imgReader := bytes.NewReader(buf.Bytes())
_, format, err := image.DecodeConfig(imgFormat)
if err != nil {
return nil, err
}
fmt.Println(format)
img, err := png.Decode(imgReader)
if err != nil {
return nil, err
}
fmt.Println(img)
return nil, nil
它不會拋出任何錯誤。我現在會堅持這樣做,但如果有更好的方法,請隨時發布答案。
- 2 回答
- 0 關注
- 128 瀏覽
添加回答
舉報