2020-02-24 18:07:47 +00:00
|
|
|
package files
|
|
|
|
|
|
|
|
import (
|
2020-03-30 20:51:26 +01:00
|
|
|
"fmt"
|
2020-03-19 10:13:38 +00:00
|
|
|
"io"
|
2020-02-24 18:07:47 +00:00
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
|
|
|
type DiskProvider struct{
|
|
|
|
FileProvider
|
|
|
|
}
|
|
|
|
|
2020-03-21 00:31:24 +00:00
|
|
|
func (dp *DiskProvider) Setup(args map[string]string) bool {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
2020-02-24 18:07:47 +00:00
|
|
|
func (dp *DiskProvider) GetDirectory(path string) Directory {
|
|
|
|
rp := strings.Join([]string{dp.Location,path}, "/")
|
|
|
|
fileDir, err := ioutil.ReadDir(rp)
|
|
|
|
if err != nil {
|
|
|
|
_ = os.MkdirAll(path, 0644)
|
|
|
|
}
|
|
|
|
var fileList []FileInfo
|
|
|
|
|
|
|
|
for _, file := range fileDir {
|
|
|
|
info := FileInfo{
|
|
|
|
IsDirectory: file.IsDir(),
|
|
|
|
Name: file.Name(),
|
|
|
|
}
|
|
|
|
if !info.IsDirectory {
|
|
|
|
split := strings.Split(file.Name(), ".")
|
|
|
|
info.Extension = split[len(split) - 1]
|
|
|
|
}
|
|
|
|
fileList = append(fileList, info)
|
|
|
|
}
|
|
|
|
|
|
|
|
return Directory{
|
|
|
|
Path: rp,
|
|
|
|
Files: fileList,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-04-15 23:19:33 +01:00
|
|
|
func (dp *DiskProvider) FilePath(path string) string {
|
2020-04-15 12:16:27 +01:00
|
|
|
rp := strings.Join([]string{dp.Location,path}, "/")
|
|
|
|
return rp
|
|
|
|
}
|
|
|
|
|
|
|
|
func (dp *DiskProvider) RemoteFile(path string, writer io.Writer) {
|
|
|
|
return
|
2020-02-24 18:07:47 +00:00
|
|
|
}
|
|
|
|
|
2020-04-03 13:26:06 +01:00
|
|
|
func (dp *DiskProvider) SaveFile(file io.Reader, filename string, path string) bool {
|
2020-04-12 22:10:51 +01:00
|
|
|
rp := strings.Join([]string{dp.Location,path,filename}, "/")
|
|
|
|
f, err := os.OpenFile(rp, os.O_WRONLY|os.O_CREATE, 0644)
|
2020-02-24 18:07:47 +00:00
|
|
|
if err != nil {
|
2020-04-12 22:10:51 +01:00
|
|
|
fmt.Printf("error creating %v: %v\n", rp, err.Error())
|
2020-02-24 18:07:47 +00:00
|
|
|
return false
|
|
|
|
}
|
2020-03-30 20:51:26 +01:00
|
|
|
defer f.Close()
|
|
|
|
|
2020-04-02 15:31:30 +01:00
|
|
|
_, err = io.Copy(f, file)
|
|
|
|
if err != nil {
|
2020-04-12 22:10:51 +01:00
|
|
|
fmt.Printf("error writing %v: %v\n", rp, err.Error())
|
2020-04-02 15:31:30 +01:00
|
|
|
return false
|
|
|
|
}
|
2020-02-24 18:07:47 +00:00
|
|
|
return true
|
2020-03-15 23:48:37 +00:00
|
|
|
}
|
|
|
|
|
2020-04-15 23:19:33 +01:00
|
|
|
func (dp *DiskProvider) ObjectInfo(path string) (bool, bool, string) {
|
2020-03-15 23:48:37 +00:00
|
|
|
rp := strings.Join([]string{dp.Location,path}, "/")
|
2020-04-15 12:16:27 +01:00
|
|
|
fileStat, err := os.Stat(rp)
|
2020-03-15 23:48:37 +00:00
|
|
|
if err != nil {
|
2020-04-15 23:19:33 +01:00
|
|
|
fmt.Printf("error gather stats for file %v: %v", rp, err.Error())
|
|
|
|
return false, false, FILE_IS_LOCAL
|
2020-03-15 23:48:37 +00:00
|
|
|
}
|
|
|
|
|
2020-04-15 12:16:27 +01:00
|
|
|
if fileStat.IsDir() {
|
2020-04-15 23:19:33 +01:00
|
|
|
return true, true, FILE_IS_LOCAL
|
2020-04-15 12:16:27 +01:00
|
|
|
}
|
2020-04-15 23:19:33 +01:00
|
|
|
return true, false, FILE_IS_LOCAL
|
2020-03-30 20:51:26 +01:00
|
|
|
}
|
2020-04-12 22:10:51 +01:00
|
|
|
|
|
|
|
func (dp *DiskProvider) CreateDirectory(path string) bool {
|
|
|
|
rp := strings.Join([]string{dp.Location,path}, "/")
|
|
|
|
err := os.Mkdir(rp, 0755)
|
|
|
|
if err != nil {
|
|
|
|
fmt.Printf("Error creating directory %v: %v\n", rp, err.Error())
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
func (dp *DiskProvider) Delete(path string) bool {
|
|
|
|
rp := strings.Join([]string{dp.Location,path}, "/")
|
|
|
|
err := os.RemoveAll(rp)
|
|
|
|
if err != nil {
|
|
|
|
fmt.Printf("Error removing %v: %v\n", path, err.Error())
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|