图像。解码结果在源为多部分时"unknown format"。文件



我有一个用户上传到我的服务器的multipart.File,然后我获取该文件并使用aws-sdk-go将其上传到 s3 ,但我也想创建该图像的缩略图。

当我file是本地文件os.Open(...的返回值时,下面的代码在我的测试中运行良好,但是当我发送CreateThumbnail我发送给s3的相同变量时,它遇到了err块,这要求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",但这已经导入(以及pnggif)。我对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)
}    

相关内容

  • 没有找到相关文章

最新更新