kra/pkg/upload/local.go

67 lines
1.3 KiB
Go

package upload
import (
"io"
"mime/multipart"
"os"
"path"
)
// Local 本地存储
type Local struct {
StorePath string
BasePath string
}
// NewLocal 创建本地存储
func NewLocal(storePath, basePath string) *Local {
return &Local{
StorePath: storePath,
BasePath: basePath,
}
}
// UploadFile 上传文件
func (l *Local) UploadFile(file *multipart.FileHeader) (string, string, error) {
// 生成文件名和路径
fileName := GenerateFileName(file.Filename)
filePath := GeneratePath(l.BasePath)
fullPath := path.Join(l.StorePath, filePath)
// 创建目录
if err := os.MkdirAll(fullPath, os.ModePerm); err != nil {
return "", "", err
}
// 打开源文件
src, err := file.Open()
if err != nil {
return "", "", err
}
defer src.Close()
// 创建目标文件
dstPath := path.Join(fullPath, fileName)
dst, err := os.Create(dstPath)
if err != nil {
return "", "", err
}
defer dst.Close()
// 复制文件
if _, err = io.Copy(dst, src); err != nil {
return "", "", err
}
// 返回访问路径和存储key
accessPath := path.Join("/", filePath, fileName)
key := path.Join(filePath, fileName)
return accessPath, key, nil
}
// DeleteFile 删除文件
func (l *Local) DeleteFile(key string) error {
fullPath := path.Join(l.StorePath, key)
return os.Remove(fullPath)
}