1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- package filesystem
- import (
- "io"
- "os"
- "path/filepath"
- "github.com/qor5/admin/media"
- )
- var _ media.Media = &FileSystem{}
- // FileSystem defined a media library storage using file system
- type FileSystem struct {
- media.Base
- }
- // GetFullPath return full file path from a relative file path
- func (f FileSystem) GetFullPath(url string, option *media.Option) (path string, err error) {
- if option != nil && option.Get("path") != "" {
- path = filepath.Join(option.Get("path"), url)
- } else {
- path = filepath.Join("./public", url)
- }
- dir := filepath.Dir(path)
- if _, err := os.Stat(dir); os.IsNotExist(err) {
- err = os.MkdirAll(dir, os.ModePerm)
- }
- return
- }
- // Store save reader's context with name
- func (f FileSystem) Store(name string, option *media.Option, reader io.Reader) (err error) {
- if fullpath, err := f.GetFullPath(name, option); err == nil {
- if dst, err := os.Create(fullpath); err == nil {
- _, err = io.Copy(dst, reader)
- }
- }
- return err
- }
- // Retrieve retrieve file content with url
- func (f FileSystem) Retrieve(url string) (media.FileInterface, error) {
- if fullpath, err := f.GetFullPath(url, nil); err == nil {
- return os.Open(fullpath)
- }
- return nil, os.ErrNotExist
- }
|