Skip to content

Commit d86e9e2

Browse files
committed
feat: multiple file upload
1 parent a153afa commit d86e9e2

File tree

2 files changed

+36
-24
lines changed

2 files changed

+36
-24
lines changed

pages/fileExplorer/PutFile.go

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package fileExplorer
33
import (
44
"fmt"
55
"go-api/infrastructure/helpers"
6+
"go-api/infrastructure/myLog"
67
"go-api/infrastructure/reqRes"
78
"io"
89
"net/http"
@@ -22,35 +23,46 @@ func (controller *Controller) PutFile(w reqRes.MyResponseWriter, r *reqRes.MyReq
2223
return
2324
}
2425

25-
formFile, handler, err := r.FormFile("file")
26-
if err != nil {
27-
message := fmt.Sprintf("Failed to retrieve file: \n%v", err)
28-
w.Error(message, http.StatusInternalServerError)
26+
files := r.MultipartForm.File["files"]
27+
if len(files) == 0 {
28+
w.Error("No files uploaded", http.StatusBadRequest)
2929
return
3030
}
31-
defer helpers.CloseSafely(formFile)
32-
33-
fmt.Printf("Uploaded File: %+v\n", handler.Filename)
34-
fmt.Printf("File Size: %+v\n", handler.Size)
35-
fmt.Printf("MIME Header: %+v\n", handler.Header)
3631

3732
folder := filepath.Join(controller.explorerRoot, pathQueryParam)
38-
path := filepath.Join(folder, handler.Filename)
3933

40-
diskFile, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, filePermissions)
41-
if err != nil {
42-
message := fmt.Sprintf("Failed to retrieve file: \n%v", err)
43-
w.Error(message, http.StatusInternalServerError)
44-
return
45-
}
46-
defer helpers.CloseSafely(diskFile)
34+
for _, handler := range files {
35+
formFile, err := handler.Open()
36+
if err != nil {
37+
message := fmt.Sprintf("Failed to retrieve file: \n%v", err)
38+
w.Error(message, http.StatusInternalServerError)
39+
}
4740

48-
_, err = io.Copy(diskFile, formFile)
49-
if err != nil {
50-
message := fmt.Sprintf("Failed to save file: \n%v", err)
51-
w.Error(message, http.StatusInternalServerError)
52-
return
41+
fmt.Printf("Uploaded File: %+v\n", handler.Filename)
42+
fmt.Printf("File Size: %+v\n", handler.Size)
43+
fmt.Printf("MIME Header: %+v\n", handler.Header)
44+
45+
path := filepath.Join(folder, handler.Filename)
46+
47+
diskFile, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, filePermissions)
48+
if err != nil {
49+
message := fmt.Sprintf("Failed to retrieve file: \n%v", err)
50+
myLog.Error.Logf(message)
51+
renderExplorer(w, folder, pathQueryParam, message)
52+
return
53+
}
54+
55+
_, err = io.Copy(diskFile, formFile)
56+
if err != nil {
57+
message := fmt.Sprintf("Failed to save file: \n%v", err)
58+
myLog.Error.Logf(message)
59+
renderExplorer(w, folder, pathQueryParam, message)
60+
return
61+
}
62+
63+
helpers.CloseSafely(formFile)
64+
helpers.CloseSafely(diskFile)
5365
}
5466

55-
renderExplorer(w, folder, pathQueryParam, "File uploaded!")
67+
renderExplorer(w, folder, pathQueryParam, "File(s) uploaded!")
5668
}

pages/fileExplorer/fileExplorerPartial.gohtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474
<h4>Upload file</h4>
7575
<form id="file-upload-form" hx-encoding="multipart/form-data" hx-put="/file/{{.Path}}"
7676
hx-target="#file-explorer">
77-
<input id="file-input" type="file" name="file" class="primary-button" required>
77+
<input id="file-input" type="file" name="files" multiple class="primary-button" required>
7878
<div class="form-submit-block">
7979
<button type="submit" class="primary-button">
8080
Upload

0 commit comments

Comments
 (0)