我是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了?
答案 0 :(得分:2)
您将新图像保存到文件中,然后不对该文件执行任何操作。如果需要,您可以从磁盘上读取文件,或者您可以在内存中对其进行编码:
_2e4w.nowrap