当源为 multipart.File 时,image.Decode 结果为 "unknown format"
image.Decode results in "unknown format" when source is multipart.File
我有一个 multipart.File
用户上传到我的服务器,然后我获取该文件并使用 aws-sdk-go
将其上传到 s3,但我还想创建该图像的缩略图.
当我 file
是本地文件的 os.Open(...
的 return 值时,下面的代码在我的测试中运行良好,但它命中了 err
块当我发送 CreateThumbnail
我发送给 s3
的相同变量时,它要求 io.Reader
import (
"image"
"image/jpeg"
)
func UploadToS3(file multipart.File, /*snip*/) {
_, uploadErr := uploader.Upload(&s3manager.UploadInput{
Bucket: aws.String(bucket),
Key: aws.String(key),
Body: file,
ContentType: aws.String(mimeType),
ACL: aws.String("public-read"),
})
reader, err := CreateThumbnail(file)
}
func CreateThumbnail(imageFile io.Reader) (io.Reader, error) {
decodedImage, _, err := image.Decode(imageFile)
if err != nil {
fmt.Println("Error decoding", err, decodedImage) // "unknown format"
return nil, err
}
/*snip*/
我看到的大多数问题答案都涉及添加 import _ "image/jpeg"
,但它已经导入(以及 png
和 gif
)。
我对 Golang 还很陌生,所以我对自己做错了什么有点迷茫。我也尝试了 image.Decode(bufio.NewReader(imageFile))
,但结果相同 err
.
调用uploader.Upload
读取到文件末尾。在调用 CreateThumbnail
:
之前返回文件的开头
func UploadToS3(file multipart.File, /*snip*/) {
_, uploadErr := uploader.Upload(&s3manager.UploadInput{
Bucket: aws.String(bucket),
Key: aws.String(key),
Body: file,
ContentType: aws.String(mimeType),
ACL: aws.String("public-read"),
})
// Seek back to beginning of file for CreateThumbnail
if _, err := file.Seek(0, 0); err != nil {
// handle error
}
reader, err := CreateThumbnail(file)
}
我有一个 multipart.File
用户上传到我的服务器,然后我获取该文件并使用 aws-sdk-go
将其上传到 s3,但我还想创建该图像的缩略图.
当我 file
是本地文件的 os.Open(...
的 return 值时,下面的代码在我的测试中运行良好,但它命中了 err
块当我发送 CreateThumbnail
我发送给 s3
的相同变量时,它要求 io.Reader
import (
"image"
"image/jpeg"
)
func UploadToS3(file multipart.File, /*snip*/) {
_, uploadErr := uploader.Upload(&s3manager.UploadInput{
Bucket: aws.String(bucket),
Key: aws.String(key),
Body: file,
ContentType: aws.String(mimeType),
ACL: aws.String("public-read"),
})
reader, err := CreateThumbnail(file)
}
func CreateThumbnail(imageFile io.Reader) (io.Reader, error) {
decodedImage, _, err := image.Decode(imageFile)
if err != nil {
fmt.Println("Error decoding", err, decodedImage) // "unknown format"
return nil, err
}
/*snip*/
我看到的大多数问题答案都涉及添加 import _ "image/jpeg"
,但它已经导入(以及 png
和 gif
)。
我对 Golang 还很陌生,所以我对自己做错了什么有点迷茫。我也尝试了 image.Decode(bufio.NewReader(imageFile))
,但结果相同 err
.
调用uploader.Upload
读取到文件末尾。在调用 CreateThumbnail
:
func UploadToS3(file multipart.File, /*snip*/) {
_, uploadErr := uploader.Upload(&s3manager.UploadInput{
Bucket: aws.String(bucket),
Key: aws.String(key),
Body: file,
ContentType: aws.String(mimeType),
ACL: aws.String("public-read"),
})
// Seek back to beginning of file for CreateThumbnail
if _, err := file.Seek(0, 0); err != nil {
// handle error
}
reader, err := CreateThumbnail(file)
}