簡單記錄一下自己在用gin上傳圖片接口
在官網上有相應的簡單介紹
在這直接說
在請求方式上是POST,然后利用FormFile獲取傳值,
file,err := c.FormFile("file")
if err != nil {
errLog.Error(logrus.Fields{"err":err.Error(),"source":pkg.GetPath()},"controller - admin - upload")
c.JSON(http.StatusOK,fmt.Sprintf("'%s' uploaded",file.Filename))
return
}
然后就是確定我們要將文件放在那個文件加下,這里是放在images文件夾下
filepath := path.Join("./"+config.BaseConf.Image.Dir,file.Filename)
限制上傳文件類型
fileExt := strings.ToLower(path.Ext(file.Filename))
if fiileExt != ".png"{
c.JSON(http.StatusOK,gin.H{"uploading":"done","message":"上傳圖片不是png格式文件",}))
return
}
然后就是保存圖片
if err != nil {
errLog.Error(logrus.Fields{"err":err.Error(),"source":pkg.GetPath()},"controller - admin - upload - SaveUploadedFile")
c.JSON(http.StatusOK,err.Error())
return
}
最后返回,因為所需,所以返回的是url
c.JSON(http.StatusOK,gin.H{"uploading":"done","message":"success","url":"http://"+c.Request.Host+config.BaseConf.Image.Dir+file.Filename})
再返回url之前需要我們先將images文件夾變為靜態文件夾可直接訪問
r := gin.Default()
r.StaticFS("/images",http.Dir("./images"))
最后完整代碼,由於我這里是自己練習前后端沒有對上傳文件做限制就不寫了
package upload
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/sirupsen/logrus"
"go_service/config"
errLog "go_service/log"
"go_service/pkg"
"net/http"
"path"
)
//圖片上傳
func UploadImage(c *gin.Context) {
file,err := c.FormFile("file")
if err != nil {
errLog.Error(logrus.Fields{"err":err.Error(),"source":pkg.GetPath()},"controller - admin - upload")
c.JSON(http.StatusOK,fmt.Sprintf("'%s' uploaded",file.Filename))
return
}
filepath := path.Join("./"+config.BaseConf.Image.Dir,file.Filename)
err = c.SaveUploadedFile(file,filepath)
if err != nil {
errLog.Error(logrus.Fields{"err":err.Error(),"source":pkg.GetPath()},"controller - admin - upload - SaveUploadedFile")
c.JSON(http.StatusOK,err.Error())
return
}
c.JSON(http.StatusOK,gin.H{"uploading":"done","message":"success","url":"http://"+c.Request.Host+config.BaseConf.Image.Dir+file.Filename})
}
文件和圖片上傳保存沒啥區別