Skip to content

Commit 120500e

Browse files
committed
Support multi-files.
1 parent f21b028 commit 120500e

File tree

3 files changed

+55
-27
lines changed

3 files changed

+55
-27
lines changed

cmd/html.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ var homeHTML string = `
99
</head>
1010
<body>
1111
<form enctype="multipart/form-data" action="/upload" method="post">
12-
<input type="file" id="upload-file" class="upload-file" onClick="selectFile()"/>
12+
<input type="file" multiple="multiple" id="upload-file" class="upload-file" onClick="selectFile()"/>
1313
</br>
1414
<p>
1515
<input type="checkbox" id="upload-converted" class="upload-converted" checked="checked" />

cmd/main.go

Lines changed: 50 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"fmt"
77
"io"
88
"io/fs"
9+
"mime/multipart"
910
"net/http"
1011
"os"
1112
"path"
@@ -25,7 +26,7 @@ var refreshScript string
2526

2627
type RequestData struct {
2728
converted bool
28-
fileName string
29+
files []string
2930
}
3031

3132
type EnvSettings struct {
@@ -90,6 +91,26 @@ func convertEPUB(converted bool, fileName string) (string, error) {
9091
return newFileName, nil
9192
}
9293

94+
func saveOneFile(h *multipart.FileHeader) (string, error) {
95+
file, err := h.Open()
96+
if err != nil {
97+
return "", err
98+
}
99+
100+
defer file.Close()
101+
102+
fileName := path.Join(uploadPath, h.Filename)
103+
f, err := os.OpenFile(fileName, os.O_WRONLY|os.O_CREATE, 0666)
104+
if err != nil {
105+
return "", err
106+
}
107+
108+
io.Copy(f, file)
109+
f.Close()
110+
111+
return fileName, nil
112+
}
113+
93114
func saveFile(r *http.Request) (RequestData, error) {
94115
var data RequestData
95116

@@ -108,26 +129,20 @@ func saveFile(r *http.Request) (RequestData, error) {
108129
converted = true
109130
}
110131

111-
file, handler, err := r.FormFile("upload-file")
112-
if err != nil {
113-
return data, err
114-
}
115-
defer file.Close()
132+
data.converted = converted
116133

117-
fmt.Printf("uploadFile (%s) (%s) \n", handler.Filename, convertedStr)
134+
fileHeaders := r.MultipartForm.File["upload-file"]
135+
for i := 0; i < len(fileHeaders); i++ {
136+
header := fileHeaders[i]
137+
s, err := saveOneFile(header)
138+
if err != nil {
139+
return data, err
140+
}
118141

119-
fileName := path.Join(uploadPath, handler.Filename)
120-
f, err := os.OpenFile(fileName, os.O_WRONLY|os.O_CREATE, 0666)
121-
if err != nil {
122-
return data, err
142+
fmt.Printf("uploadFile (%s) (%s) \n", header.Filename, convertedStr)
143+
data.files = append(data.files, s)
123144
}
124145

125-
io.Copy(f, file)
126-
f.Close()
127-
128-
data.converted = converted
129-
data.fileName = fileName
130-
131146
return data, nil
132147
}
133148

@@ -146,18 +161,29 @@ func uploadFile(w http.ResponseWriter, r *http.Request) {
146161

147162
t2 := time.Now()
148163

149-
finalFile, err := convertEPUB(requestData.converted, requestData.fileName)
150-
if err != nil {
151-
res.Result = fmt.Sprintf("Error: (%v)", err);
152-
s := responseString(res)
153-
fmt.Fprintf(w, s)
154-
return
164+
fileNames := ""
165+
166+
for i := 0; i < len(requestData.files); i++ {
167+
file := requestData.files[i]
168+
finalFile, err := convertEPUB(requestData.converted, file)
169+
if err != nil {
170+
res.Result = fmt.Sprintf("Error: (%v)", err);
171+
s := responseString(res)
172+
fmt.Fprintf(w, s)
173+
return
174+
}
175+
176+
if i != 0 {
177+
fileNames += ", "
178+
}
179+
180+
fileNames += finalFile;
155181
}
156182

157183
t3 := time.Now()
158184

159185
res.Result = "OK"
160-
res.FileName = finalFile
186+
res.FileName = fileNames
161187
res.SavedTime = t2.Sub(t1).String()
162188
res.ConvertedTime = t3.Sub(t2).String()
163189

cmd/web/upload.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,10 @@ function uploadFile()
6666

6767
let formData = new FormData();
6868

69-
let fileName = $inputName[0].files[0];
70-
formData.append('upload-file', fileName);
69+
for (let i = 0; i < $inputName[0].files.length; i++) {
70+
let fileName = $inputName[0].files[i];
71+
formData.append('upload-file', fileName);
72+
}
7173

7274
let converted = '0';
7375
if ($converted.prop('checked')) {

0 commit comments

Comments
 (0)