我正在使用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

记住要检查并处理所有潜在的错误。

10-04 10:13