duanba8173 2015-06-17 15:34
浏览 207
已采纳

当源为多部分时,image.Decode导致“未知格式”。File

I have a multipart.File that a user uploads to my server, and then I take that file and upload it to s3 using aws-sdk-go, but I also want to create a thumbnail of that image.

The code below works fine in my tests when I file is the return value of an os.Open(... of a local file, but it hit's the err block when I send CreateThumbnail the same variable I sent to s3, which asks for an 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*/

Most of the answers I see for the problem involve adding import _ "image/jpeg", but that's already imported (as well as png and gif). I'm fairly new to Golang, so I'm a bit lost as to what I'm doing wrong. I tried image.Decode(bufio.NewReader(imageFile)) as well, but that results in the same err.

  • 写回答

1条回答 默认 最新

  • duanpuluan0480 2015-06-18 05:40
    关注

    The call uploader.Upload reads to the end of the file. Seek back to the beginning of the file before calling 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)
    }    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办