我正在编写一个使用 gqlgen
作为 graphQL API 的 go 应用程序。
当用户使用 api 上传文件时,我将其作为 graphql.Upload
类型获取
type Upload struct {
File io.reader
Filename string
Size int64
ContentType string
}
我希望能够加载图像的 exif 数据,解码图像并根据 exif 方向旋转它。
我使用 github.com/rwcarlsen/goexif/exif
获取 exif 信息并使用 github.com/disintegration/imaging
进行轮换,但我无法打开 graphql.Upload.File
两次。它失败了 2hd 时间。
func updateImage(dir string,id int,imgFile *graphql.Upload) error {
image := dbimage.GetImagePathNoTemplate(dir,id)
imageThumbnail := dbimage.GetImageThumbnailPathNoTemplate(dir,id)
var myImage image2.Image
var err error
switch imgFile.ContentType {
case "image/png":
if myImage,err = png.Decode(imgFile.File); err != nil {
return err
}
break
case "image/jpeg":
if myImage,err = jpeg.Decode(imgFile.File); err != nil {
return err
}
break
case "image/webp":
if myImage,err = webpbin.Decode(imgFile.File); err != nil {
return err
}
break
default:
return errors.Errorf("unknown image mimetype %v",imgFile.ContentType)
}
FAILS HERE: metaData,err := exif.Decode(imgFile.File)
...
}
当然如果我先提取exif然后解码图像,那么图像解码就会失败。
我没有得到文件的完整路径,我只得到一个 io.reader
。我该怎么做才能同时获取 exif 和解码图像?
谢谢