mirror of
https://github.com/m5stack/StackChan.git
synced 2026-04-27 19:12:40 +00:00
71 lines
1.3 KiB
Go
71 lines
1.3 KiB
Go
/*
|
|
SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
|
|
SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
package service
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
v1 "stackChan/api/file/v1"
|
|
|
|
"github.com/gogf/gf/v2/errors/gcode"
|
|
"github.com/gogf/gf/v2/errors/gerror"
|
|
)
|
|
|
|
func AddFile(ctx context.Context, req *v1.FileReq) (res *v1.FileRes, err error) {
|
|
currentDir, err := os.Getwd()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
baseDir := "file"
|
|
fileDir := filepath.Join(currentDir, baseDir)
|
|
|
|
if req.Directory != "" {
|
|
fileDir = filepath.Join(fileDir, req.Directory)
|
|
}
|
|
|
|
if _, err := os.Stat(fileDir); os.IsNotExist(err) {
|
|
if err := os.MkdirAll(fileDir, os.ModePerm); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
if req.File.Size == 0 || req.Name == "" {
|
|
return nil, gerror.NewCode(gcode.CodeInvalidParameter, "file or filename is empty")
|
|
}
|
|
|
|
filePath := filepath.Join(fileDir, req.Name)
|
|
|
|
file, err := req.File.Open()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
fileBytes, err := io.ReadAll(file)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := os.WriteFile(filePath, fileBytes, os.ModePerm); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
_ = file.Close()
|
|
|
|
var returnPath string
|
|
if req.Directory != "" {
|
|
returnPath = filepath.Join(baseDir, req.Directory, req.Name)
|
|
} else {
|
|
returnPath = filepath.Join(baseDir, req.Name)
|
|
}
|
|
|
|
return &v1.FileRes{
|
|
Path: returnPath,
|
|
}, nil
|
|
}
|