Ma Suhyeon

Implement extraction upload

...@@ -34,4 +34,5 @@ ...@@ -34,4 +34,5 @@
34 # End of https://www.toptal.com/developers/gitignore/api/go,vscode 34 # End of https://www.toptal.com/developers/gitignore/api/go,vscode
35 35
36 __debug_bin 36 __debug_bin
37 -config.json
...\ No newline at end of file ...\ No newline at end of file
37 +config.json
38 +data
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -32,6 +32,7 @@ func NewApp(config Config) *App { ...@@ -32,6 +32,7 @@ func NewApp(config Config) *App {
32 app.router = mux.NewRouter() 32 app.router = mux.NewRouter()
33 app.router.HandleFunc("/users", app.PostUsers).Methods("POST") 33 app.router.HandleFunc("/users", app.PostUsers).Methods("POST")
34 app.router.HandleFunc("/users/tokens", app.PostTokens).Methods("POST") 34 app.router.HandleFunc("/users/tokens", app.PostTokens).Methods("POST")
35 + app.router.Handle("/extractions", app.WithAuth(app.PostExtractions)).Methods("Post")
35 36
36 return app 37 return app
37 } 38 }
......
1 +package main
2 +
3 +import (
4 + "fmt"
5 + "io"
6 + "net/http"
7 + "os"
8 + "strings"
9 +
10 + "github.com/google/uuid"
11 +)
12 +
13 +func (app *App) PostExtractions(w http.ResponseWriter, r *http.Request) {
14 + userNo := r.Context().Value(PropUserNo).(uint64)
15 + r.ParseMultipartForm(32 << 20)
16 +
17 + form, _, err := r.FormFile("file")
18 + if err != nil {
19 + WriteError(w, http.StatusInternalServerError, "Unknown error")
20 + return
21 + }
22 +
23 + defer form.Close()
24 +
25 + dir := fmt.Sprintf("data/%d", userNo)
26 + os.MkdirAll(dir, 0644)
27 +
28 + name := strings.Replace(uuid.New().String(), "-", "", -1)
29 + file, err := os.Create(fmt.Sprintf("%s/%s", dir, name))
30 + if err != nil {
31 + WriteError(w, http.StatusInternalServerError, "Unknown error")
32 + return
33 + }
34 + defer file.Close()
35 +
36 + _, err = io.Copy(file, form)
37 + if err != nil {
38 + WriteError(w, http.StatusInternalServerError, "Unknown error")
39 + return
40 + }
41 +
42 + w.Write([]byte("success"))
43 +}
...@@ -5,6 +5,7 @@ go 1.15 ...@@ -5,6 +5,7 @@ go 1.15
5 require ( 5 require (
6 github.com/dgrijalva/jwt-go v3.2.0+incompatible 6 github.com/dgrijalva/jwt-go v3.2.0+incompatible
7 github.com/go-sql-driver/mysql v1.5.0 7 github.com/go-sql-driver/mysql v1.5.0
8 + github.com/google/uuid v1.1.2
8 github.com/gorilla/mux v1.8.0 9 github.com/gorilla/mux v1.8.0
9 github.com/jmoiron/sqlx v1.2.0 10 github.com/jmoiron/sqlx v1.2.0
10 golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 11 golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897
......
...@@ -4,6 +4,8 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm ...@@ -4,6 +4,8 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm
4 github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= 4 github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
5 github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= 5 github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
6 github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= 6 github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
7 +github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
8 +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
7 github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= 9 github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
8 github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= 10 github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
9 github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA= 11 github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA=
......