当源为multipart时,将代码以“未知格式”生成。文件

时间:2015-06-17 15:34:54

标签: image go martini

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

当我file是本地文件的os.Open(...的返回值时,下面的代码在我的测试中正常工作,但是当我发送{{1}时,它会点击err块我发送给s3的同一个变量,它要求CreateThumbnail

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)。 我对Golang很新,所以我对自己做错了有点失落。我也尝试了gif,但结果却是image.Decode(bufio.NewReader(imageFile))

1 个答案:

答案 0 :(得分:6)

调用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)
}