summaryrefslogtreecommitdiff
path: root/system/admin/upload.go
diff options
context:
space:
mode:
Diffstat (limited to 'system/admin/upload.go')
-rw-r--r--system/admin/upload.go90
1 files changed, 0 insertions, 90 deletions
diff --git a/system/admin/upload.go b/system/admin/upload.go
deleted file mode 100644
index 3f61765..0000000
--- a/system/admin/upload.go
+++ /dev/null
@@ -1,90 +0,0 @@
-package admin
-
-import (
- "fmt"
- "io"
- "net/http"
- "os"
- "path/filepath"
- "strconv"
- "time"
-)
-
-// StoreFileUploads stores file uploads at paths like /YYYY/MM/filename.ext
-func StoreFileUploads(req *http.Request) (map[string]string, error) {
- err := req.ParseMultipartForm(1024 * 1024 * 4) // maxMemory 4MB
- if err != nil {
- return nil, fmt.Errorf("%s", err)
- }
-
- ts := req.FormValue("timestamp") // timestamp in milliseconds since unix epoch
-
- if ts == "" {
- ts = fmt.Sprintf("%d", time.Now().Unix()*1000) // Unix() returns seconds since unix epoch
- }
-
- req.Form.Set("timestamp", ts)
-
- // To use for FormValue name:urlPath
- urlPaths := make(map[string]string)
-
- // get or create upload directory to save files from request
- pwd, err := os.Getwd()
- if err != nil {
- err := fmt.Errorf("Failed to locate current directory: %s", err)
- return nil, err
- }
-
- i, err := strconv.ParseInt(ts, 10, 64)
- if err != nil {
- return nil, err
- }
-
- tm := time.Unix(int64(i/1000), int64(i%1000))
-
- urlPathPrefix := "api"
- uploadDirName := "uploads"
-
- uploadDir := filepath.Join(pwd, uploadDirName, fmt.Sprintf("%d", tm.Year()), fmt.Sprintf("%d", tm.Month()))
- err = os.MkdirAll(uploadDir, os.ModeDir|os.ModePerm)
-
- // loop over all files and save them to disk
- for name, fds := range req.MultipartForm.File {
- filename := fds[0].Filename
- src, err := fds[0].Open()
- if err != nil {
- err := fmt.Errorf("Couldn't open uploaded file: %s", err)
- return nil, err
-
- }
- defer src.Close()
-
- // check if file at path exists, if so, add timestamp to file
- absPath := filepath.Join(uploadDir, filename)
-
- if _, err := os.Stat(absPath); !os.IsNotExist(err) {
- filename = fmt.Sprintf("%d-%s", time.Now().Unix(), filename)
- absPath = filepath.Join(uploadDir, filename)
- }
-
- // save to disk (TODO: or check if S3 credentials exist, & save to cloud)
- dst, err := os.Create(absPath)
- if err != nil {
- err := fmt.Errorf("Failed to create destination file for upload: %s", err)
- return nil, err
- }
-
- // copy file from src to dst on disk
- if _, err = io.Copy(dst, src); err != nil {
- err := fmt.Errorf("Failed to copy uploaded file to destination: %s", err)
- return nil, err
- }
-
- // add name:urlPath to req.PostForm to be inserted into db
- urlPath := fmt.Sprintf("/%s/%s/%d/%d/%s", urlPathPrefix, uploadDirName, tm.Year(), tm.Month(), filename)
-
- urlPaths[name] = urlPath
- }
-
- return urlPaths, nil
-}