Golang如何将新包集成到我的图片上传代码中

时间:2017-01-13 22:57:30

标签: go

我是Golang的新手,并且有一个功能可以将图像上传到我的Amazon s3帐户并保存。一切都很好,但我正在寻找一种方法来调整图像大小,因为一些图像的大小高达4MB。我找到了一个可以正确调整图像https://github.com/disintegration/imaging大小的包。我的问题是如何使用新的已调整大小的图像而不是旧文件进行上传?例如,这是我上传图片但没有调整大小的原始代码

func UploadProfile(w http.ResponseWriter, r *http.Request) {
     r.ParseForm()
     var buff bytes.Buffer
         var result string


     sess, _ := "access keys"

     svc := s3.New(sess)

     file, handler, err := r.FormFile("file")
     if err != nil {
         fmt.Println("Error Uploading Image")
         return
     }
     defer file.Close()
     read_file,err := ioutil.ReadAll(file)
     fileBytes := bytes.NewReader(read_file)
     if err != nil {
         fmt.Println("Error Reading file")
         return
     }


     file.Read(read_file)
     path := handler.Filename
     params := &s3.PutObjectInput{
         Bucket: aws.String("amazon-bucket"),
         Key: aws.String(path),
         Body: fileBytes,
     }
     resp, err := svc.PutObject(params)
     if err != nil {
         fmt.Printf("bad response: %s", err)

     }

 }

我现在遇到的问题是使用下面的代码段

 file_open,err := imaging.Open("myImage.jpg")

        if err != nil {
            print("Imaging Open error")
        }
        new_image := imaging.Resize(file_open, 300, 300, imaging.Lanczos)
        errs := imaging.Save(new_image, "dst.jpg")
        if errs != nil {
            print(err)
        }

上面的代码获取任何图像并将其调整为300到300,这正是我想要的,现在我如何使用新图像并将其发送到我的s3图像存储桶?令我困惑的部分是new_image的类型为 image.NRGBA ,而原始图像的类型为 Multipart.File 。当我将图像上传到亚马逊时,它想知道它有多少字节,我不能做像

这样的事情
read_file,err := ioutil.ReadAll(new_image)
        if err != nil {
            fmt.Println("Error Reading file")
            return
        }

因为它只需要io.Reader类型的东西有没有解决这个问题?这样我就可以将我的新图像保存到亚马逊s3了?

1 个答案:

答案 0 :(得分:2)

您将新图像保存到文件中,然后不对该文件执行任何操作。如果需要,您可以从磁盘上读取文件,或者您可以在内存中对其进行编码:

_2e4w.nowrap