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 关注
- 153 浏览
添加回答
举报