當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring 文件上传功能
生活随笔
收集整理的這篇文章主要介紹了
Spring 文件上传功能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本篇文章,我們要來做一個Spring的文件上傳功能:
1. 創建一個Maven的web工程,然后配置pom.xml文件,增加依賴:
| 1 2 3 4 5 | <dependency> ????<groupId>org.springframework.boot</groupId> ????<artifactId>spring-boot-starter-web</artifactId> ????<version>1.0.2.RELEASE</version> </dependency> |
2.在webapp目錄下的index.jsp文件中輸入一個表單:
| 1 2 3 4 5 6 7 8 9 10 | <html> <body> <form method="POST"?enctype="multipart/form-data" ??????action="/upload"> ????File to upload: <input type="file"?name="file"><br /> Name: <input ????????type="text"?name="name"><br /> <br /> <input type="submit" ?????????????????????????????????????????????????????value="Upload"> Press here to upload the file! </form> </body> </html> |
這個表單就是我們模擬的上傳頁面。
3. 編寫處理這個表單的Controller:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import?java.io.BufferedOutputStream; import?java.io.File; import?java.io.FileOutputStream; import?org.springframework.stereotype.Controller; import?org.springframework.web.bind.annotation.RequestMapping; import?org.springframework.web.bind.annotation.RequestMethod; import?org.springframework.web.bind.annotation.RequestParam; import?org.springframework.web.bind.annotation.ResponseBody; import?org.springframework.web.multipart.MultipartFile; @Controller public?class?FileUploadController { ????@RequestMapping(value="/upload", method=RequestMethod.GET) ????public?@ResponseBody?String provideUploadInfo() { ????????return?"You can upload a file by posting to this same URL."; ????} ????@RequestMapping(value="/upload", method=RequestMethod.POST) ????public?@ResponseBody?String handleFileUpload(@RequestParam("name") String name, ????????????@RequestParam("file") MultipartFile file){ ????????if?(!file.isEmpty()) { ????????????try?{ ????????????????byte[] bytes = file.getBytes(); ????????????????BufferedOutputStream stream = ????????????????????????new?BufferedOutputStream(new?FileOutputStream(new?File(name +?"-uploaded"))); ????????????????stream.write(bytes); ????????????????stream.close(); ????????????????return?"You successfully uploaded "?+ name +?" into "?+ name +?"-uploaded !"; ????????????}?catch?(Exception e) { ????????????????return?"You failed to upload "?+ name +?" => "?+ e.getMessage(); ????????????} ????????}?else?{ ????????????return?"You failed to upload "?+ name +?" because the file was empty."; ????????} ????} } |
4. 然后我們對上傳的文件做一些限制,同時編寫main方法來啟動這個web :
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import?org.springframework.boot.SpringApplication; import?org.springframework.boot.autoconfigure.EnableAutoConfiguration; import?org.springframework.boot.context.embedded.MultiPartConfigFactory; import?org.springframework.context.annotation.Bean; import?org.springframework.context.annotation.ComponentScan; import?org.springframework.context.annotation.Configuration; import?javax.servlet.MultipartConfigElement; @Configuration @ComponentScan @EnableAutoConfiguration public?class?Application { ????@Bean ????public?MultipartConfigElement multipartConfigElement() { ????????MultiPartConfigFactory factory =?new?MultiPartConfigFactory(); ????????factory.setMaxFileSize("128KB"); ????????factory.setMaxRequestSize("128KB"); ????????return?factory.createMultipartConfig(); ????} ????public?static?void?main(String[] args) { ????????SpringApplication.run(Application.class, args); ????} } |
5. 然后訪問http://localhost:8080/upload就可以看到頁面了。
?
上面的例子是實現的是單個文件上傳的功能,假定我們現在要實現文件批量上傳的功能的話,我們只需要簡單的修改一下上面的代碼就行,考慮到篇幅的問題,下面只是貼出和上面不同的代碼,沒有貼出的說明和上面一樣。:
1. 新增batchUpload.jsp文件
| 1 2 3 4 5 6 7 8 9 10 | <html> <body> <form method="POST"?enctype="multipart/form-data" ??????action="/batch/upload"> ????File to upload: <input type="file"?name="file"><br /> ????File to upload: <input type="file"?name="file"><br /> ????<input type="submit"?value="Upload"> Press here to upload the file! </form> </body> </html> |
2. 新增BatchFileUploadController.java文件:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import?org.springframework.stereotype.Controller; import?org.springframework.web.bind.annotation.RequestMapping; import?org.springframework.web.bind.annotation.RequestMethod; import?org.springframework.web.bind.annotation.ResponseBody; import?org.springframework.web.multipart.MultipartFile; import?org.springframework.web.multipart.MultipartHttpServletRequest; import?javax.servlet.http.HttpServletRequest; import?java.io.BufferedOutputStream; import?java.io.File; import?java.io.FileOutputStream; import?java.util.List; /** ?* Created by wenchao.ren on 2014/4/26. ?*/ @Controller public?class?BatchFileUploadController { ????@RequestMapping(value="/batch/upload", method= RequestMethod.POST) ????public?@ResponseBody ????String handleFileUpload(HttpServletRequest request){ ????????List<MultipartFile> files = ((MultipartHttpServletRequest)request).getFiles("file"); ????????for?(int?i =0; i< files.size(); ++i) { ????????????MultipartFile file = files.get(i); ????????????String name = file.getName(); ????????????if?(!file.isEmpty()) { ????????????????try?{ ????????????????????byte[] bytes = file.getBytes(); ????????????????????BufferedOutputStream stream = ????????????????????????????new?BufferedOutputStream(new?FileOutputStream(new?File(name + i))); ????????????????????stream.write(bytes); ????????????????????stream.close(); ????????????????}?catch?(Exception e) { ????????????????????return?"You failed to upload "?+ name +?" => "?+ e.getMessage(); ????????????????} ????????????}?else?{ ????????????????return?"You failed to upload "?+ name +?" because the file was empty."; ????????????} ????????} ????????return?"upload successful"; ????} } |
這樣一個簡單的批量上傳文件的功能就ok了,是不是很簡單啊。
?
注意:上面的代碼只是為了演示而已,所以編碼風格上采取了隨性的方式,不建議大家模仿。
?
參考資料:
1. MultipartResolver也可以實現文件上傳功能。參考文章:http://mylfd.iteye.com/blog/1893648
總結
以上是生活随笔為你收集整理的Spring 文件上传功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 。。。
- 下一篇: 从零开始学_JavaScript_系列(