init
This commit is contained in:
97
lib/upload.go
Normal file
97
lib/upload.go
Normal file
@ -0,0 +1,97 @@
|
||||
package lib
|
||||
|
||||
import (
|
||||
"Edu/utils"
|
||||
"errors"
|
||||
"fmt"
|
||||
"mime/multipart"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
type (
|
||||
UploadConfig struct {
|
||||
Path string // 根目录,完整目录-更目录+时间
|
||||
Ext []string // 文件类型
|
||||
Size int64 // 文件大小
|
||||
Rename bool // 重命名
|
||||
}
|
||||
|
||||
UploadHandle struct {
|
||||
Url string `json:"url"`
|
||||
Filepath string `json:"filepath"`
|
||||
Filename string `json:"filename"`
|
||||
RelativePath string `json:"-"`
|
||||
}
|
||||
)
|
||||
|
||||
type (
|
||||
Handle func(file *multipart.FileHeader, domain string) (*UploadHandle, error)
|
||||
)
|
||||
|
||||
func (this *UploadConfig) ext(ext string) bool {
|
||||
if !utils.InArray(strings.ToLower(ext), this.Ext) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (this *UploadConfig) size(size int64) bool {
|
||||
if size > this.Size {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (this *UploadConfig) Handle() Handle {
|
||||
return func(file *multipart.FileHeader, domain string) (handle *UploadHandle, e error) {
|
||||
ext := filepath.Ext(file.Filename)
|
||||
|
||||
if !this.ext(strings.Replace(ext, ".", "", 1)) {
|
||||
return nil, errors.New("文件类型限制不可上传")
|
||||
}
|
||||
|
||||
if !this.size(file.Size) {
|
||||
return nil, errors.New("文件过大不可上传")
|
||||
}
|
||||
// 判断目录是否存在
|
||||
now := time.Now()
|
||||
|
||||
this.Path += now.Format("20060102") + "/"
|
||||
|
||||
isExist, err := utils.PathExists(this.Path)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if !isExist {
|
||||
if err = utils.MkdirAll(this.Path); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
_file := file.Filename
|
||||
|
||||
if this.Rename {
|
||||
file.Filename = utils.Md5String(file.Filename, fmt.Sprintf("%d", now.UnixNano()))
|
||||
_file = file.Filename + ext
|
||||
}
|
||||
_filepath := "/" + this.Path + _file
|
||||
|
||||
return &UploadHandle{
|
||||
Url: domain + _filepath,
|
||||
Filepath: _filepath,
|
||||
Filename: _file,
|
||||
RelativePath: this.Path + _file,
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
func Upload(path string, ext []string, size int64, rename bool) *UploadConfig {
|
||||
return &UploadConfig{
|
||||
Path: path,
|
||||
Ext: ext,
|
||||
Size: size,
|
||||
Rename: rename,
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user