@@ -2,14 +2,14 @@ package main
2
2
3
3
import (
4
4
"github.com/dastoori/higgs"
5
+ "io"
5
6
"path/filepath"
6
7
"strconv"
7
8
)
8
9
9
10
import (
10
11
"fmt"
11
12
"html/template"
12
- "io"
13
13
"log"
14
14
"math"
15
15
"net/http"
@@ -75,7 +75,7 @@ const directoryListingTemplateText = `
75
75
</tr>
76
76
{{- end }}
77
77
{{- if .AllowUpload }}
78
- <tr><td colspan=4><form method="post" enctype="multipart/form-data"><input required name="file" type="file"/><input value="Upload" type="submit"/></form></td></tr>
78
+ <tr><td colspan=4><form method="post" enctype="multipart/form-data"><input required name="file" type="file multiple "/><input value="Upload" type="submit"/></form></td></tr>
79
79
{{- end }}
80
80
</tbody>
81
81
</table>
@@ -311,26 +311,27 @@ func (f *fileHandler) serveDir(w http.ResponseWriter, r *http.Request, osPath st
311
311
}
312
312
313
313
func (f * fileHandler ) serveUploadTo (w http.ResponseWriter , r * http.Request , osPath string ) error {
314
- if err := r .ParseForm (); err != nil {
315
- return err
316
- }
317
- in , h , err := r .FormFile ("file" )
318
- if err == http .ErrMissingFile {
319
- w .Header ().Set ("Location" , r .URL .String ())
320
- w .WriteHeader (303 )
321
- }
322
- if err != nil {
323
- return err
324
- }
325
- outPath := filepath .Join (osPath , filepath .Base (h .Filename ))
326
- out , err := os .OpenFile (outPath , os .O_CREATE | os .O_WRONLY , 0600 )
314
+ mr , err := r .MultipartReader ()
327
315
if err != nil {
328
316
return err
329
317
}
330
- defer out .Close ()
331
-
332
- if _ , err := io .Copy (out , in ); err != nil {
333
- return err
318
+ for {
319
+ part , err := mr .NextPart ()
320
+ if err == io .EOF {
321
+ break
322
+ } else if err != nil {
323
+ return err
324
+ } else if part .FormName () == "file" {
325
+ outPath := filepath .Join (osPath , filepath .Base (part .FileName ()))
326
+ out , err := os .OpenFile (outPath , os .O_CREATE | os .O_WRONLY , 0600 )
327
+ if err != nil {
328
+ return err
329
+ }
330
+ defer out .Close ()
331
+ if _ , err := io .Copy (out , part ); err != nil {
332
+ return err
333
+ }
334
+ }
334
335
}
335
336
w .Header ().Set ("Location" , r .URL .String ())
336
337
w .WriteHeader (303 )
0 commit comments