1
0
mirror of https://github.com/fumiama/paper-manager.git synced 2026-06-09 02:01:31 +08:00
Files
paper-manager/backend/global/list.go
2023-04-07 14:34:06 +08:00

63 lines
1.3 KiB
Go

package global
import (
"errors"
"io"
"os"
"strconv"
"strings"
"time"
)
var (
ErrInvalidSaveName = errors.New("invalid save name")
)
// List of file path
type List struct {
ID *int // ID is self-inc
Uploader int // Uploader is uid
UpTime int64 // UpTime is upload time (unix timestamp)
Size int64 // Size of the original file
IsTemp bool // IsTemp whether file is temp
Path string // Path of file
}
// SaveFileToTemp copy file to PaperFolder/tmp/uploader/name and add record into list.
func (f *FileDatabase) SaveFileToTemp(uploader int, file io.Reader, name string) (err error) {
_, err = UserDB.GetUserByID(uploader)
if err != nil {
return
}
if strings.Contains(name, "..") || strings.Contains(name, "/") {
err = ErrInvalidSaveName
return
}
tmpdir := PaperFolder + "tmp/" + strconv.Itoa(uploader)
err = os.MkdirAll(tmpdir, 0755)
if err != nil {
return
}
lst := List{
Uploader: uploader,
UpTime: time.Now().Unix(),
IsTemp: true,
Path: tmpdir + "/" + name,
}
ff, err := os.Create(lst.Path)
if err != nil {
return
}
sz, err := io.Copy(ff, file)
_ = ff.Close()
if err != nil {
_ = os.Remove(lst.Path)
return
}
lst.Size = sz
FileDB.mu.Lock()
err = FileDB.db.Insert(FileTableList, &lst)
FileDB.mu.Unlock()
return
}