Commit f6fedd70 authored by shajiaiming's avatar shajiaiming

文件上传

parent 8b2e2cd7
...@@ -41,4 +41,8 @@ const ( ...@@ -41,4 +41,8 @@ const (
ERROR_UPLOAD_SAVE_IMAGE_FAIL = 30001 ERROR_UPLOAD_SAVE_IMAGE_FAIL = 30001
ERROR_UPLOAD_CHECK_IMAGE_FAIL = 30002 ERROR_UPLOAD_CHECK_IMAGE_FAIL = 30002
ERROR_UPLOAD_CHECK_IMAGE_FORMAT = 30003 ERROR_UPLOAD_CHECK_IMAGE_FORMAT = 30003
ERROR_UPLOAD_SAVE_FILE_FAIL = 30011
ERROR_UPLOAD_CHECK_FILE_FAIL = 30012
ERROR_UPLOAD_CHECK_FILE_FORMAT = 30013
) )
...@@ -40,6 +40,9 @@ var MsgFlags = map[int]string{ ...@@ -40,6 +40,9 @@ var MsgFlags = map[int]string{
ERROR_UPLOAD_SAVE_IMAGE_FAIL: "保存图片失败", ERROR_UPLOAD_SAVE_IMAGE_FAIL: "保存图片失败",
ERROR_UPLOAD_CHECK_IMAGE_FAIL: "检查图片失败", ERROR_UPLOAD_CHECK_IMAGE_FAIL: "检查图片失败",
ERROR_UPLOAD_CHECK_IMAGE_FORMAT: "校验图片错误,图片格式或大小有问题", ERROR_UPLOAD_CHECK_IMAGE_FORMAT: "校验图片错误,图片格式或大小有问题",
ERROR_UPLOAD_SAVE_FILE_FAIL: "保存文件失败",
ERROR_UPLOAD_CHECK_FILE_FAIL: "检查文件失败",
ERROR_UPLOAD_CHECK_FILE_FORMAT: "校验文件错误,文件格式或大小有问题",
} }
// GetMsg get error information based on Code // GetMsg get error information based on Code
......
...@@ -19,6 +19,10 @@ type App struct { ...@@ -19,6 +19,10 @@ type App struct {
ImageMaxSize int ImageMaxSize int
ImageAllowExts []string ImageAllowExts []string
FileSavePath string
FileMaxSize int
FileAllowExts []string
ExportSavePath string ExportSavePath string
QrCodeSavePath string QrCodeSavePath string
FontSavePath string FontSavePath string
...@@ -89,6 +93,7 @@ func Setup() { ...@@ -89,6 +93,7 @@ func Setup() {
mapTo("oss", OssSetting) mapTo("oss", OssSetting)
AppSetting.ImageMaxSize = AppSetting.ImageMaxSize * 1024 * 1024 AppSetting.ImageMaxSize = AppSetting.ImageMaxSize * 1024 * 1024
AppSetting.FileMaxSize = AppSetting.FileMaxSize * 1024 * 1024
ServerSetting.ReadTimeout = ServerSetting.ReadTimeout * time.Second ServerSetting.ReadTimeout = ServerSetting.ReadTimeout * time.Second
ServerSetting.WriteTimeout = ServerSetting.ReadTimeout * time.Second ServerSetting.WriteTimeout = ServerSetting.ReadTimeout * time.Second
RedisSetting.IdleTimeout = RedisSetting.IdleTimeout * time.Second RedisSetting.IdleTimeout = RedisSetting.IdleTimeout * time.Second
......
package upload
import (
"fmt"
"log"
"mime/multipart"
"os"
"path"
"strings"
"bwallet/pkg/file"
"bwallet/pkg/logging"
"bwallet/pkg/setting"
"bwallet/pkg/util"
)
// GetFileFullUrl get the full access path
func GetFileFullUrl(name string) string {
return setting.AppSetting.PrefixUrl + "/" + GetFilePath() + name
}
// GetFileName get File name
func GetFileName(name string) string {
ext := path.Ext(name)
fileName := strings.TrimSuffix(name, ext)
fileName = util.EncodeMD5(fileName)
return fileName + ext
}
// GetFilePath get save path
func GetFilePath() string {
return setting.AppSetting.FileSavePath
}
// GetFileFullPath get full save path
func GetFileFullPath() string {
return setting.AppSetting.RuntimeRootPath + GetFilePath()
}
// CheckFileExt check File file ext
func CheckFileExt(fileName string) bool {
ext := file.GetExt(fileName)
for _, allowExt := range setting.AppSetting.FileAllowExts {
if strings.ToUpper(allowExt) == strings.ToUpper(ext) {
return true
}
}
return false
}
// CheckFileSize check File size
func CheckFileSize(f multipart.File) bool {
size, err := file.GetSize(f)
if err != nil {
log.Println(err)
logging.Warn(err)
return false
}
return size <= setting.AppSetting.FileMaxSize
}
// CheckFile check if the file exists
func CheckFile(src string) error {
dir, err := os.Getwd()
if err != nil {
return fmt.Errorf("os.Getwd err: %v", err)
}
err = file.IsNotExistMkDir(dir + "/" + src)
if err != nil {
return fmt.Errorf("file.IsNotExistMkDir err: %v", err)
}
perm := file.CheckPermission(src)
if perm == true {
return fmt.Errorf("file.CheckPermission Permission denied src: %s", src)
}
return nil
}
...@@ -9,7 +9,6 @@ import ( ...@@ -9,7 +9,6 @@ import (
"bwallet/pkg/e" "bwallet/pkg/e"
"bwallet/pkg/logging" "bwallet/pkg/logging"
"bwallet/pkg/upload" "bwallet/pkg/upload"
"fmt"
) )
// @Summary Import Image // @Summary Import Image
...@@ -37,12 +36,6 @@ func UploadImage(c *gin.Context) { ...@@ -37,12 +36,6 @@ func UploadImage(c *gin.Context) {
savePath := upload.GetImagePath() savePath := upload.GetImagePath()
src := fullPath + imageName src := fullPath + imageName
//fmt.Println(imageName)
//fmt.Println(fullPath)
//fmt.Println(savePath)
//fmt.Println(src)
//os.Exit(0)
if !upload.CheckImageExt(imageName) || !upload.CheckImageSize(file) { if !upload.CheckImageExt(imageName) || !upload.CheckImageSize(file) {
appG.Response(http.StatusBadRequest, e.ERROR_UPLOAD_CHECK_IMAGE_FORMAT, nil) appG.Response(http.StatusBadRequest, e.ERROR_UPLOAD_CHECK_IMAGE_FORMAT, nil)
return return
...@@ -50,21 +43,58 @@ func UploadImage(c *gin.Context) { ...@@ -50,21 +43,58 @@ func UploadImage(c *gin.Context) {
err = upload.CheckImage(fullPath) err = upload.CheckImage(fullPath)
if err != nil { if err != nil {
logging.Warn(err)
appG.Response(http.StatusInternalServerError, e.ERROR_UPLOAD_CHECK_IMAGE_FAIL, nil) appG.Response(http.StatusInternalServerError, e.ERROR_UPLOAD_CHECK_IMAGE_FAIL, nil)
return return
} }
if err := c.SaveUploadedFile(image, src); err != nil { if err := c.SaveUploadedFile(image, src); err != nil {
logging.Warn(err)
appG.Response(http.StatusInternalServerError, e.ERROR_UPLOAD_SAVE_IMAGE_FAIL, nil) appG.Response(http.StatusInternalServerError, e.ERROR_UPLOAD_SAVE_IMAGE_FAIL, nil)
return return
} }
fmt.Println(upload.GetImageFullUrl(imageName))
fmt.Println(savePath + imageName)
appG.Response(http.StatusOK, e.SUCCESS, map[string]string{ appG.Response(http.StatusOK, e.SUCCESS, map[string]string{
"image_url": upload.GetImageFullUrl(imageName), "image_url": upload.GetImageFullUrl(imageName),
"image_save_url": savePath + imageName, "image_save_url": savePath + imageName,
}) })
} }
func UploadFile(c *gin.Context) {
appG := app.Gin{C: c}
file, apk, err := c.Request.FormFile("file")
if err != nil {
logging.Warn(err)
appG.Response(http.StatusInternalServerError, e.ERROR, nil)
return
}
if apk == nil {
appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
return
}
apkName := upload.GetFileName(apk.Filename)
fullPath := upload.GetFileFullPath()
savePath := upload.GetFilePath()
src := fullPath + apkName
if !upload.CheckFileExt(apkName) || !upload.CheckFileSize(file) {
appG.Response(http.StatusBadRequest, e.ERROR_UPLOAD_CHECK_FILE_FORMAT, nil)
return
}
err = upload.CheckFile(fullPath)
if err != nil {
appG.Response(http.StatusInternalServerError, e.ERROR_UPLOAD_CHECK_FILE_FAIL, nil)
return
}
if err := c.SaveUploadedFile(apk, src); err != nil {
appG.Response(http.StatusInternalServerError, e.ERROR_UPLOAD_SAVE_FILE_FAIL, nil)
return
}
appG.Response(http.StatusOK, e.SUCCESS, map[string]string{
"file_url": upload.GetFileFullUrl(apkName),
"file_save_url": savePath + apkName,
})
}
...@@ -17,10 +17,11 @@ func InitRouter() *gin.Engine { ...@@ -17,10 +17,11 @@ func InitRouter() *gin.Engine {
r.Use(gin.Recovery()) r.Use(gin.Recovery())
r.StaticFS("/upload/images", http.Dir(upload.GetImageFullPath())) r.StaticFS("/upload/file", http.Dir(upload.GetFileFullPath()))
//r.StaticFS("/qrcode", http.Dir(qrcode.GetQrCodeFullPath())) //r.StaticFS("/qrcode", http.Dir(qrcode.GetQrCodeFullPath()))
r.POST("/auth", api.GetAuth) r.POST("/auth", api.GetAuth)
r.POST("/upload", api.UploadFile)
//r.POST("/upload", api.UploadImage) //r.POST("/upload", api.UploadImage)
api := r.Group("/api") api := r.Group("/api")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment