Mercurial > gemma
comparison pkg/controllers/agmimports.go @ 2194:4d6979dedb11
Imports: Deduplicted file upload code.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 12 Feb 2019 11:09:55 +0100 |
parents | 515bdc765565 |
children | 33af355047e1 |
comparison
equal
deleted
inserted
replaced
2193:35c56ace42b9 | 2194:4d6979dedb11 |
---|---|
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de> | 12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de> |
13 | 13 |
14 package controllers | 14 package controllers |
15 | 15 |
16 import ( | 16 import ( |
17 "bufio" | |
18 "io" | |
19 "io/ioutil" | |
20 "log" | 17 "log" |
21 "net/http" | 18 "net/http" |
22 "os" | |
23 "path/filepath" | |
24 "time" | 19 "time" |
25 | 20 |
26 "gemma.intevation.de/gemma/pkg/auth" | 21 "gemma.intevation.de/gemma/pkg/auth" |
27 "gemma.intevation.de/gemma/pkg/common" | 22 "gemma.intevation.de/gemma/pkg/common" |
28 "gemma.intevation.de/gemma/pkg/config" | |
29 "gemma.intevation.de/gemma/pkg/imports" | 23 "gemma.intevation.de/gemma/pkg/imports" |
24 "gemma.intevation.de/gemma/pkg/misc" | |
30 ) | 25 ) |
31 | 26 |
32 const ( | 27 const ( |
28 approvedGaugeMeasurementsName = "approvedgm" | |
33 maxApprovedGaugeMeasurementSize = 25 * 1024 * 1024 | 29 maxApprovedGaugeMeasurementSize = 25 * 1024 * 1024 |
34 approvedGaugeMeasurementsName = "approvedgm" | |
35 ) | 30 ) |
36 | |
37 func storeApprovedGaugeMeasurements(req *http.Request) (string, error) { | |
38 | |
39 // Check for direct upload. | |
40 f, _, err := req.FormFile(approvedGaugeMeasurementsName) | |
41 if err != nil { | |
42 return "", err | |
43 } | |
44 defer f.Close() | |
45 | |
46 dir, err := ioutil.TempDir(config.TmpDir(), approvedGaugeMeasurementsName) | |
47 if err != nil { | |
48 return "", err | |
49 } | |
50 | |
51 o, err := os.Create(filepath.Join(dir, "agm.csv")) | |
52 if err != nil { | |
53 os.RemoveAll(dir) | |
54 return "", err | |
55 } | |
56 | |
57 out := bufio.NewWriter(o) | |
58 | |
59 if _, err = io.Copy(out, io.LimitReader(f, maxApprovedGaugeMeasurementSize)); err != nil { | |
60 o.Close() | |
61 os.RemoveAll(dir) | |
62 return "", err | |
63 } | |
64 | |
65 if err = out.Flush(); err != nil { | |
66 o.Close() | |
67 os.RemoveAll(dir) | |
68 return "", err | |
69 } | |
70 | |
71 return dir, nil | |
72 } | |
73 | 31 |
74 func importApprovedGaugeMeasurements(rw http.ResponseWriter, req *http.Request) { | 32 func importApprovedGaugeMeasurements(rw http.ResponseWriter, req *http.Request) { |
75 | 33 |
76 dir, err := storeApprovedGaugeMeasurements(req) | 34 dir, err := misc.StoreUploadedFile( |
35 req, | |
36 approvedGaugeMeasurementsName, | |
37 "agm.csv", | |
38 maxApprovedGaugeMeasurementSize) | |
77 if err != nil { | 39 if err != nil { |
78 log.Printf("error: %v\n", err) | 40 log.Printf("error: %v\n", err) |
79 http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) | 41 http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) |
80 return | 42 return |
81 } | 43 } |