@@ -86,7 +86,7 @@ func uploadPage(w http.ResponseWriter, r *http.Request) {
8686 </head>
8787 <body>
8888 <form enctype="multipart/form-data" action="/api/upload" method="post">
89- <input type="file" name="file01 " />
89+ <input type="file" multiple="multiple" name="files " />
9090 <input type="submit" value="upload" />
9191 </form>
9292 </body>
@@ -99,56 +99,59 @@ func uploadFile(w http.ResponseWriter, r *http.Request) {
9999 // 1. parse input
100100 r .ParseMultipartForm (10 << 20 ) // 10 MB
101101
102- // 2. retrieve file
103- file , header , err := r .FormFile ("file01" )
104- if err != nil {
105- fmt .Println (err )
106- w .WriteHeader (400 )
107- w .Write ([]byte ("Error retrieving the file" ))
108- return
109- }
110- defer file .Close ()
111-
112- fileName := header .Filename
113- fileSize := header .Size
114- fmt .Println ("=======================================" )
115- fmt .Printf ("Uploading file: %+v\n " , fileName )
116- fmt .Printf ("File : %.2f MB\n " , float64 (fileSize )/ (1 << 20 ))
117- fmt .Printf ("MIME type: %+v\n " , header .Header ["Content-Type" ])
118-
119- // 3. write temporary file on our server
120- tempFile , err := ioutil .TempFile ("" , "http-upload-*" )
121- if err != nil {
122- fmt .Println (err )
123- w .WriteHeader (500 )
124- w .Write ([]byte ("Error creating temp file" ))
125- return
126- }
127- // fmt.Printf("Temp file %+v\n", tempFile.Name())
128- defer tempFile .Close ()
129-
130- if _ , err := io .CopyN (tempFile , file , fileSize ); err != nil {
131- fmt .Println (err )
132- w .WriteHeader (500 )
133- w .Write ([]byte ("Error saving the file" ))
134- return
135- }
102+ fhs := r .MultipartForm .File ["files" ]
103+ for _ , fh := range fhs {
104+ // 2. retrieve file
105+ file , err := fh .Open ()
106+ if err != nil {
107+ fmt .Println (err )
108+ w .WriteHeader (400 )
109+ w .Write ([]byte ("Error retrieving the file" ))
110+ return
111+ }
112+ defer file .Close ()
136113
137- // 4. move file
138- newFileName := fileName
139- extension := filepath .Ext (fileName )
140- fileNameNoExt := fileName [0 : len (fileName )- len (extension )]
141- i := 2
142- for {
143- if _ , err := os .Stat (filepath .Join (folder , newFileName )); err == nil {
144- // file exists
145- newFileName = fmt .Sprintf ("%s-%d%s" , fileNameNoExt , i , extension )
146- i ++
147- } else {
148- break
114+ fileName := fh .Filename
115+ fileSize := fh .Size
116+ fmt .Println ("=======================================" )
117+ fmt .Printf ("Uploading file: %+v\n " , fileName )
118+ fmt .Printf ("File : %.2f MB\n " , float64 (fileSize )/ (1 << 20 ))
119+ fmt .Printf ("MIME type: %+v\n " , fh .Header ["Content-Type" ])
120+
121+ // 3. write temporary file on our server
122+ tempFile , err := ioutil .TempFile ("" , "http-upload-*" )
123+ if err != nil {
124+ fmt .Println (err )
125+ w .WriteHeader (500 )
126+ w .Write ([]byte ("Error creating temp file" ))
127+ return
128+ }
129+ // fmt.Printf("Temp file %+v\n", tempFile.Name())
130+ defer tempFile .Close ()
131+
132+ if _ , err := io .CopyN (tempFile , file , fileSize ); err != nil {
133+ fmt .Println (err )
134+ w .WriteHeader (500 )
135+ w .Write ([]byte ("Error saving the file" ))
136+ return
137+ }
138+
139+ // 4. move file
140+ newFileName := fileName
141+ extension := filepath .Ext (fileName )
142+ fileNameNoExt := fileName [0 : len (fileName )- len (extension )]
143+ i := 2
144+ for {
145+ if _ , err := os .Stat (filepath .Join (folder , newFileName )); err == nil {
146+ // file exists
147+ newFileName = fmt .Sprintf ("%s-%d%s" , fileNameNoExt , i , extension )
148+ i ++
149+ } else {
150+ break
151+ }
149152 }
153+ os .Rename (tempFile .Name (), filepath .Join (folder , newFileName ))
150154 }
151- os .Rename (tempFile .Name (), filepath .Join (folder , newFileName ))
152155
153156 // done
154157 fmt .Printf ("Successfully Uploaded File\n \n \n " )
0 commit comments