我正在使用Golang作为 Restful api。我有一个IOS应用程序,该应用程序在图像上传到Golang后由用户上传照片,它会处理该图像并将其上传(到Amazon s3),因此在我的本地目录中找不到这些图像。我之前使用过FormFile来读取图像,例如
func s3ImageUpload(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
file, handler, err := r.FormFile("file")
if err != nil {
fmt.Println("Error Uploading Image")
return
}
// Rest of Code that uploads Image to my Amazon s3 Bucket no issues here
}
上面的代码的问题在于,有时会上传大小为4MB的图像,而且图像太大,因此我得到了一个新软件包来调整图像https://www.github.com/disintegration/imaging的大小。我昨天在此发布了帖子,并获得了很大的帮助,并设法上传了在本地目录中找到的图像,但是我需要找到如何加载外部图像。我唯一遇到的问题是此软件包的 Open方法,根据go-docs,这是该方法的解释
功能开放
func Open(filename string) (image.Image, error)
打开从文件加载图像
因此,如果我在本地目录中有图像并想要调整其大小,则可以执行此操作
file_open,err := imaging.Open("/Users/IH/Documents/pictures/BigTurtle.jpg")
if err != nil {
print("Imaging Open error")
}
new_image := imaging.Resize(file_open, 300, 300, imaging.Lanczos)
//其余代码将新图像发送到Amazon s3,它可以正常工作
一切正常,但如前所述,图像是从其他人的IOS设备外部提供的,因此我无法放入图像路径。我试图做到这一点
file_open,err := imaging.Open(handler.filename)
和
file_open,err := imaging.Open("file")
但是它指出没有找到图像或目录,我是Golang的新手,但是是否可以通过某种方式将外部文件发送到Imaging.open中?
我需要那个是因为方法`imaging.Resize()的第一个参数是 image.Image 类型,它与 Imaging.Open 类型相同。不幸的是, r.FormFile(“file”)类型为Multipart.File,至少在我不了解的情况下无法调整大小。任何帮助都会很棒。
最佳答案
无需打开图像;它已应要求提供。
您可以按照以下方式进行操作:
file = r.FormFile()
img = image.Decode(file)
imgResized = imaging.Resize(img, ..)
Request.FormFile返回io.Reader的multipart.File,因此可以将其传递给image.Decode,以将图像传递给imaging.Resize。
记住要检查并处理所有潜在的错误。