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
2627type RequestData struct {
2728 converted bool
28- fileName string
29+ files [] string
2930}
3031
3132type 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+
93114func 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
0 commit comments