From 8bf8de541ac90bda96751b5bc3103f50cc46bbd4 Mon Sep 17 00:00:00 2001 From: Georg Spar Date: Wed, 21 Jun 2023 21:35:47 +0200 Subject: [PATCH] fileupload versuch --- data.go | 3 +++ wdm.go | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) diff --git a/data.go b/data.go index baa4acf..44497ef 100644 --- a/data.go +++ b/data.go @@ -2,6 +2,9 @@ package main import "database/sql" +// Pfad für die Ablage der Uploads +var UploadPfad string = "/opt/data/uploads" + // struct für das Einbinden von Items, die gekauft wurden type Itemb struct { Id uint64 `json:"id"` diff --git a/wdm.go b/wdm.go index f7713a7..9b92af5 100644 --- a/wdm.go +++ b/wdm.go @@ -53,6 +53,9 @@ func main() { r.HandleFunc("/api/v1/itb", showItemBHandler).Methods("GET", "OPTIONS") r.HandleFunc("/api/v1/itb/{id:[0-9]+}", getItemBHandler).Methods("GET", "OPTIONS") r.HandleFunc("/api/v1/itb/{id:[0-9]+}", updateItemBHandler).Methods("PUT", "OPTIONS") + + r.HandleFunc("/api/v1/upload", uploadFileHandler).Methods("POST", "OPTIONS") + /* r.HandleFunc("/api/v1/ite", createItemExtHandler).Methods("POST", "OPTIONS") r.HandleFunc("/api/v1/ite/{id:[0-9]+}", deleteItemExtHandler).Methods("DELETE", "OPTIONS") @@ -701,3 +704,78 @@ func updateItemBHandler(writer http.ResponseWriter, req *http.Request) { writer.WriteHeader(http.StatusOK) writer.Write(b) } + +// Upload Funktionen +func uploadFileHandlerHandler(writer http.ResponseWriter, req *http.Request) { + writer.Header().Set("Access-Control-Allow-Origin", "*") + if req.Method == http.MethodOptions { + return + } + + err := req.ParseMultipartForm(64 << 20) + if err != nil { + writer.WriteHeader(http.StatusBadRequest) + return + } + var pho []Photos + if req.Form["files"] != nil { + for i := 0; i < len(req.Form["files"]); i++ { + log.Info("File-Name:", req.FormValue("files[i].name")) + + file, handler, err := req.FormFile("files[i]") + if err != nil { + panic(err) //dont do this + } + defer file.Close() + os.Chdir(UploadPfad) + // copy example + f, err := os.OpenFile(handler.Filename, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + panic(err) //please dont + } + defer f.Close() + io.Copy(f, file) + + pho[i].Pfad = handler.Filename + pho[i].ItembId = 0 + pho[i].ItemextId = 0 + + } + + for formKey, formValue := range req.Form { + log.WithFields(log.Fields{formKey: formValue}).Info("parsing from Form: ") + } + + } else { + body, err := io.ReadAll(req.Body) + if err != nil { + writer.WriteHeader(http.StatusBadRequest) + } + var pho []Photos + json.Unmarshal(body, &pho) + } + if len(pho) == 0 { + log.Fatal("Error: Size of Array = 0") + writer.WriteHeader(http.StatusInternalServerError) + + } + for i := 0; i < len(pho); i++ { + log.Println(pho[i]) + log.Println("Name= ", pho[i].Pfad) + log.Info("creating new Photo", pho[i].Pfad) + res, err := CreatePhoto(pho[i]) + if err != nil { + writer.WriteHeader(http.StatusInternalServerError) + } + b, err := json.Marshal(res) + if err != nil { + log.Fatal("Error: ", err) + } + location := fmt.Sprintf("%s/%d", req.URL.String(), res.Id) + writer.Header().Set("Location:", location) + writer.Header().Set("Content-Type", "application/json") + writer.WriteHeader(http.StatusCreated) + writer.Write(b) + } + +}