|
|
|
@ -1,6 +1,8 @@
|
|
|
|
|
package storage
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"errors"
|
|
|
|
|
"fmt"
|
|
|
|
|
"io"
|
|
|
|
|
"log"
|
|
|
|
|
"mime/multipart"
|
|
|
|
@ -24,7 +26,18 @@ func GetStoreDestination(filename string) string {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func StoreFormFile(src multipart.File, filename string) error {
|
|
|
|
|
fd, err := os.Create(GetStoreDestination(filename))
|
|
|
|
|
filePath := GetStoreDestination(filename)
|
|
|
|
|
// If file exists just return
|
|
|
|
|
exists, err := CheckFileExists(filePath)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
if exists {
|
|
|
|
|
log.Printf("file %s exists, skipping write", filename)
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fd, err := os.Create(filePath)
|
|
|
|
|
defer fd.Close()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
@ -36,6 +49,24 @@ func StoreFormFile(src multipart.File, filename string) error {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func CheckFileExists(file string) (bool, error) {
|
|
|
|
|
info, err := os.Stat(file)
|
|
|
|
|
if err == nil {
|
|
|
|
|
if info.IsDir() {
|
|
|
|
|
errMsg := fmt.Sprintf("'%s' is a directory", file)
|
|
|
|
|
return false, errors.New(errMsg)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if os.IsNotExist(err) {
|
|
|
|
|
return false, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
|
path, set := os.LookupEnv(StoragePathEnv)
|
|
|
|
|
if !set {
|
|
|
|
|