| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- package file_store
- import (
- "github.com/pkg/errors"
- "io"
- "os"
- "path/filepath"
- )
- type LocalFile struct {
- StoragePath string
- }
- // TODO 实现本来存储文件
- // Setup 装载 endpoint sss
- func (e *LocalFile) Setup(storagePath, _, _, _ string, _ ...ClientOption) error {
- absolutePath, err := filepath.Abs(storagePath)
- if err != nil {
- return errors.New("获取本地文件的绝对路径失败")
- }
- e.StoragePath = absolutePath
- return nil
- }
- // UpLoad 上传文件
- func (e *LocalFile) UpLoad(yourObjectName string, localFile interface{}) error {
- var reader io.Reader
- targetPath := filepath.Join(e.StoragePath, yourObjectName)
- switch v := localFile.(type) {
- case string:
- // 如果是文件路径
- localFilePath := v
- absolutePath, err := filepath.Abs(localFilePath)
- if err != nil {
- return errors.Wrap(err, "获取本地文件的绝对路径失败")
- }
- file, err := os.Open(absolutePath)
- if err != nil {
- return errors.Wrap(err, "打开本地文件失败")
- }
- defer func(file *os.File) {
- _ = file.Close()
- }(file)
- reader = file
- case *os.File:
- // 如果是文件对象
- if v == nil || v.Name() == "" {
- return errors.New("无效的文件对象")
- }
- reader = v
- default:
- return errors.New("不支持的参数类型,必须为文件路径字符串或*os.File类型")
- }
- // 验证并创建目标路径
- if err := validateAndCreatePath(targetPath); err != nil {
- return errors.Wrap(err, "验证和创建目标路径失败")
- }
- // 创建目标文件并准备写入
- target, err := os.Create(targetPath)
- if err != nil {
- return errors.Wrap(err, "创建目标文件失败")
- }
- defer func(target *os.File) {
- _ = target.Close()
- }(target)
- // 复制文件内容到目标位置
- if _, err = io.Copy(target, reader); err != nil {
- return errors.Wrap(err, "复制文件内容到目标位置失败")
- }
- return nil
- }
- // 验证和创建目标路径
- func validateAndCreatePath(path string) error {
- dir := filepath.Dir(path)
- if err := os.MkdirAll(dir, 0755); err != nil && !os.IsExist(err) {
- return errors.Wrap(err, "创建目标文件所在父级目录失败")
- }
- return nil
- }
- // GetTempToken 获取临时Token
- func (e *LocalFile) GetTempToken() (string, error) {
- return "", nil
- }
|