本篇文章,我们要来做一个Spring的文件上传功能:
- 创建一个Maven的web工程,然后配置pom.xml文件,增加依赖:
| 12345 | <dependency>`` ``<groupId>org.springframework.boot</groupId>`` ``<artifactId>spring-boot-starter-web</artifactId>`` ``<version>``1.0``.``2``.RELEASE</version>``</dependency> |
|---|
2.在webapp目录下的index.jsp文件中输入一个表单:
| 12345678910 | <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> |
|---|
这个表单就是我们模拟的上传页面。
- 编写处理这个表单的Controller:
| 123456789101112131415161718192021222324252627282930313233343536373839 | 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."``;`` ``}`` ``} } |
|---|
- 然后我们对上传的文件做一些限制,同时编写main方法来启动这个web :
| 1234567891011121314151617181920212223242526 | 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文件
| 12345678910 | <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> |
|---|
- 新增BatchFileUploadController.java文件:
| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 | 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了,是不是很简单啊。