mirror of
https://gitee.com/xiangheng/x_admin.git
synced 2025-10-21 15:19:32 +08:00
统一上传文件不区分图片、视频接口,素材中心私有化
This commit is contained in:
@@ -20,7 +20,7 @@ var StorageDriver = storageDriver{}
|
||||
// UploadFile 文件对象
|
||||
type UploadFile struct {
|
||||
Name string // 文件名称
|
||||
Type int // 文件类型
|
||||
// Type int // 文件类型
|
||||
Size int64 // 文件大小
|
||||
Ext string // 文件扩展
|
||||
Uri string // 文件路径
|
||||
@@ -31,25 +31,34 @@ type UploadFile struct {
|
||||
type storageDriver struct{}
|
||||
|
||||
// Upload 根据引擎类型上传文件
|
||||
func (sd storageDriver) Upload(file *multipart.FileHeader, folder string, fileType int) (uf *UploadFile, e error) {
|
||||
func (sd storageDriver) Upload(file *multipart.FileHeader) (uf *UploadFile, e error) {
|
||||
// TODO: engine默认local
|
||||
if e = sd.checkFile(file, fileType); e != nil {
|
||||
|
||||
fileExt := sd.getFileExt(file.Filename)
|
||||
if fileExt == "" {
|
||||
return nil, response.AssertArgumentError.SetMessage("文件类型错误!")
|
||||
}
|
||||
|
||||
if e = sd.checkFile(file.Filename, file.Size); e != nil {
|
||||
return
|
||||
}
|
||||
key := sd.buildSaveName(file)
|
||||
var folder string = fileExt
|
||||
|
||||
saveName := sd.buildSaveName(file)
|
||||
engine := "local"
|
||||
if engine == "local" {
|
||||
if e = sd.localUpload(file, key, folder); e != nil {
|
||||
if e = sd.localUpload(file, folder, saveName); e != nil {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
core.Logger.Errorf("storageDriver.Upload engine err: err=[unsupported engine]")
|
||||
return nil, response.Failed.SetMessage(fmt.Sprintf("engine:%s 暂时不支持", engine))
|
||||
}
|
||||
fileRelPath := path.Join(folder, key)
|
||||
|
||||
fileRelPath := path.Join(folder, saveName)
|
||||
return &UploadFile{
|
||||
Name: file.Filename,
|
||||
Type: fileType,
|
||||
// Type: int(fileType),
|
||||
Size: file.Size,
|
||||
Ext: strings.ToLower(strings.Replace(path.Ext(file.Filename), ".", "", 1)),
|
||||
Uri: fileRelPath,
|
||||
@@ -58,7 +67,7 @@ func (sd storageDriver) Upload(file *multipart.FileHeader, folder string, fileTy
|
||||
}
|
||||
|
||||
// localUpload 本地上传 (临时方法)
|
||||
func (sd storageDriver) localUpload(file *multipart.FileHeader, key string, folder string) (e error) {
|
||||
func (sd storageDriver) localUpload(file *multipart.FileHeader, folder string, saveName string) (e error) {
|
||||
// TODO: 临时方法,后续调整
|
||||
// 映射目录
|
||||
directory := config.FileConfig.UploadDirectory
|
||||
@@ -70,8 +79,8 @@ func (sd storageDriver) localUpload(file *multipart.FileHeader, key string, fold
|
||||
}
|
||||
defer src.Close()
|
||||
// 文件信息
|
||||
savePath := path.Join(directory, folder, path.Dir(key))
|
||||
saveFilePath := path.Join(directory, folder, key)
|
||||
savePath := path.Join(directory, folder, path.Dir(saveName))
|
||||
saveFilePath := path.Join(directory, folder, saveName)
|
||||
// 创建目录
|
||||
err = os.MkdirAll(savePath, 0755)
|
||||
if err != nil && !os.IsExist(err) {
|
||||
@@ -94,6 +103,7 @@ func (sd storageDriver) localUpload(file *multipart.FileHeader, key string, fold
|
||||
"storageDriver.localUpload Copy err: file=[%s], err=[%+v]", saveFilePath, err)
|
||||
return response.Failed.SetMessage("上传文件失败: " + err.Error())
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -101,35 +111,40 @@ func (sd storageDriver) localUpload(file *multipart.FileHeader, key string, fold
|
||||
func (sd storageDriver) buildSaveName(file *multipart.FileHeader) string {
|
||||
name := file.Filename
|
||||
ext := strings.ToLower(path.Ext(name))
|
||||
date := time.Now().Format("20060201")
|
||||
date := time.Now().Format("20060102")
|
||||
return path.Join(date, util.ToolsUtil.MakeUuid()+ext)
|
||||
}
|
||||
|
||||
// checkFile 文件验证
|
||||
func (sd storageDriver) checkFile(file *multipart.FileHeader, fileType int) (e error) {
|
||||
fileName := file.Filename
|
||||
// getFileExt 获取文件扩展名
|
||||
func (sd storageDriver) getFileExt(fileName string) string {
|
||||
fileExt := strings.ToLower(strings.Replace(path.Ext(fileName), ".", "", 1))
|
||||
fileSize := file.Size
|
||||
switch fileType {
|
||||
case 10:
|
||||
return fileExt
|
||||
}
|
||||
|
||||
// checkFile 文件验证
|
||||
func (sd storageDriver) checkFile(fileName string, fileSize int64) (e error) {
|
||||
|
||||
fileExt := sd.getFileExt(fileName)
|
||||
|
||||
if util.ToolsUtil.Contains(config.FileConfig.UploadImageExt, fileExt) {
|
||||
// 图片文件
|
||||
if !util.ToolsUtil.Contains(config.FileConfig.UploadImageExt, fileExt) {
|
||||
return response.Failed.SetMessage("不被支持的图片扩展: " + fileExt)
|
||||
}
|
||||
if fileSize > config.FileConfig.UploadImageSize {
|
||||
return response.Failed.SetMessage("上传图片不能超出限制: " + strconv.FormatInt(config.FileConfig.UploadImageSize/1024/1024, 10) + "M")
|
||||
}
|
||||
case 20:
|
||||
} else if util.ToolsUtil.Contains(config.FileConfig.UploadVideoExt, fileExt) {
|
||||
// 视频文件
|
||||
if !util.ToolsUtil.Contains(config.FileConfig.UploadVideoExt, fileExt) {
|
||||
return response.Failed.SetMessage("不被支持的视频扩展: " + fileExt)
|
||||
}
|
||||
if fileSize > config.FileConfig.UploadVideoSize {
|
||||
return response.Failed.SetMessage("上传视频不能超出限制: " + strconv.FormatInt(config.FileConfig.UploadVideoSize/1024/1024, 10) + "M")
|
||||
}
|
||||
default:
|
||||
} else if util.ToolsUtil.Contains(config.FileConfig.UploadFileExt, fileExt) {
|
||||
// 文件
|
||||
if fileSize > config.FileConfig.UploadFileSize {
|
||||
return response.Failed.SetMessage("上传文件不能超出限制: " + strconv.FormatInt(config.FileConfig.UploadFileSize/1024/1024, 10) + "M")
|
||||
}
|
||||
} else {
|
||||
core.Logger.Errorf("storageDriver.checkFile fileType err: err=[unsupported fileType]")
|
||||
return response.Failed.SetMessage("上传文件类型错误")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user