/
store.go
45 lines (39 loc) · 1003 Bytes
/
store.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package fs
import (
"io"
"mime/multipart"
"os"
"path"
"github.com/google/uuid"
"github.com/kapmahc/h2o/web/uploader"
)
// NewFileSystemStore new file-system uploader store
func NewFileSystemStore(root, home string) (uploader.Store, error) {
err := os.MkdirAll(root, 0755)
return &FileSystemStore{home: home, root: root}, err
}
// FileSystemStore file-system storage
type FileSystemStore struct {
home string
root string
}
// Remove remove file
func (p *FileSystemStore) Remove(url string) error {
return os.Remove(path.Join(p.root, url[len(p.home)+1:]))
}
// Save save file to file-system
func (p *FileSystemStore) Save(fh *multipart.FileHeader) (string, int64, error) {
name := uuid.New().String() + path.Ext(fh.Filename)
src, err := fh.Open()
if err != nil {
return "", 0, err
}
defer src.Close()
dst, err := os.Create(path.Join(p.root, name))
if err != nil {
return "", 0, err
}
defer dst.Close()
size, err := io.Copy(dst, src)
return p.home + "/" + name, size, err
}