golang上传压缩图文件到七牛云碰到了问题?

通过字节数组方式上传文件到七牛云,直接把表单获取到的文件上传没有问题,但由于我有生成缩略图image.Image对象,需要上传它,我的方式是转成[]byte上传。

UploadQiniuImg是路由函数
upload_qiniu_img是七牛上传函数

现在碰到了问题,1M之内的图片可以上传成功(但是图片大小未变化,哪怕我用的缩略图上传,七传结果的大小没改变,生成缩略图的方法我在本地测试过,是可行的),超过1M的上传后打开空白,大小依然不变。

有大佬告知一下吗?
以下是代码:


package api
import (
 "bytes"
 "context"
 "fmt"
 "go-love/pkg/app"
 "go-love/pkg/e"
 "go-love/pkg/logging"
 "go-love/pkg/upload"
 "io/ioutil"
 "mime/multipart"
 "net/http"
 "github.com/gin-gonic/gin"
 "github.com/qiniu/go-sdk/v7/auth/qbox"
 "github.com/qiniu/go-sdk/v7/storage"
)
const (
 accessKey = "***"
 serectKey = "***"
 bucket = "***"
 host = "***"
)
// @Tags 通用模块
// @Summary Import Image
// @Produce json
// @Param image formData file true "Image File"
// @Param type formData string true "上传类型:avatar-头像 "
// @Success 200 {object} app.Response
// @Failure 500 {object} app.Response
// @Router /api/v1/upload_qiniu [post]
// @Security ApiKeyAuth
func UploadQiniuImg(c *gin.Context) {
 //从请求当中判断方法
 appG := app.Gin{C: c}
 file, image, err := c.Request.FormFile("file")
 uploadType := c.PostForm("type")
 if err != nil {
 logging.Warn(err)
 appG.FailJson(e.ERROR)
 return
 }
 if image == nil {
 appG.FailJson(e.INVALID_PARAMS)
 return
 }
 imageName := upload.GetImageName(image.Filename)
 fullPath := upload.GetImageFullPath() + uploadType + "/"
 // savePath := upload.GetImagePath() + uploadType + "/"
 // src := fullPath + imageName
 size := upload.GetFileSize(file)
 if !upload.CheckImageExt(imageName) || !upload.CheckImageSize(file) {
 appG.FailJson(e.ERROR_UPLOAD_CHECK_FORMAT)
 return
 }
 err = upload.CheckFile(fullPath)
 if err != nil {
 logging.Warn(err)
 appG.FailJson(e.ERROR_UPLOAD_CHECK_FAIL)
 return
 }
 //上传头像时,进行中心等比裁剪为400*400
 var byteData []byte
 if uploadType == "avatar" {
 fmt.Println("准备缩放裁剪头像")
 fileContent, _ := image.Open()
 content, err := ioutil.ReadAll(fileContent)
 if err != nil {
 fmt.Println("文件读取失败")
 }
 // 生成缩略图
 thumbimg := upload.CreateThumbImg(content)
 // image转byte
 byteData, err = upload.ImageToByte(thumbimg, imageName)
 } else {
 // FileHeader转byte
 content, _ := image.Open()
 byteData, err = ioutil.ReadAll(content)
 if err != nil {
 fmt.Println("文件读取失败")
 }
 }
 // url, err := upload_qiniu_img(uploadType, imageName, *image)
 url, err := upload_qiniu_img(uploadType, imageName, byteData)
 if err != nil {
 logging.Warn(err)
 appG.FailJson(e.ERROR)
 return
 }
 appG.Response(http.StatusOK, e.SUCCESS, map[string]string{
 "fileSize": size,
 "fileUrl": url,
 "fileName": imageName,
 })
}
func upload_qiniu_img(uploadType string, imageName string, byteData []byte) (string, error) {
 key := "imgs/" + uploadType + "/" + imageName
 fmt.Println("upload: ", imageName)
 putPolicy := storage.PutPolicy{
 Scope: fmt.Sprintf("%s:%s", bucket, key),
 }
 mac := qbox.NewMac(accessKey, serectKey)
 upToken := putPolicy.UploadToken(mac)
 cfg := storage.Config{}
 // 空间对应的机房
 cfg.Zone = &storage.ZoneHuanan
 // 是否使用https域名
 cfg.UseHTTPS = false
 // 上传是否使用CDN上传加速
 cfg.UseCdnDomains = false
 formUploader := storage.NewFormUploader(&cfg)
 ret := storage.PutRet{}
 putExtra := storage.PutExtra{}
 datalen := int64(len(byteData))
 err := formUploader.Put(context.Background(), &ret, upToken, key, bytes.NewReader(byteData), datalen, &putExtra)
 if err != nil {
 fmt.Println(err)
 return "", err
 }
 return host + "/" + ret.Key, nil
}
作者:赞原文地址:https://segmentfault.com/q/1010000043811797

%s 个评论

要回复文章请先登录注册