SpringMVC-文件上传
SpringMVC-文件上传
1.文件上传
1.1 文件上传必须
a. form表单的enctype取值必须是:multipart/form-data(默认值是:application/x-www-form-urlencoded)
b. method属性取值必须是post
c. 提供一个文件选择域。<input type="file"/>
1.2 文件上传的原理分析
当form表单的enctype取值不是默认值后,request.getParameter()将失效
enctype="aaplication/x-www-form-urlencoded"时,form表单的正文内容是:
key=value&key=value&key=value
enctype="multipart/form-data"时,请求正文的内容就变成:
每一部分都是MIME类型的描述正文
-----------------------------7de1a433602ac 分界符Content-Disposition: form-data; name="userName" 协议头...
1.3 依赖jar包
2. 传统方式实现文件上传
传统方式的文件上传,指的是我们上传的文件和访问的应用存在于同一台服务器上。
2.1 pom.xml文件依赖
<!--文件上传依赖的两个jar包--> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>
2.2 jsp页面
<form action="/user/fileupload01" method="post" enctype="multipart/form-data"> 选择文件:<input type="file" name="upload"><br> <input type="submit" value="上传"> </form>
2.3 编写控制器
@Controller @RequestMapping("/user") public class FileUploadController { /** * 使用原始方式上传文件 * @return */ @RequestMapping("/fileupload01") public String testFileUpload(HttpServletRequest request) throws Exception { //使用fileupload组件完成上传文件 //上传的位置 String realPath = request.getSession().getServletContext().getRealPath("/uploads"); System.out.println(realPath); //判断该路径是否存在 File file = new File(realPath); if (!file.exists()){ //创建该文件夹 file.mkdirs(); } //解析request对象,获取上传文件项 DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload= new ServletFileUpload(factory); //解析request List<FileItem> items = upload.parseRequest(request); for (FileItem item: items) { //进行判断,当前item是否是上传文件项 if (item.isFormField()){ //普通表单项 }else { String uuid = UUID.randomUUID().toString().replace("-", ""); //文件上传项 String fileName = uuid + "_" +item.getName(); //完成上传 item.write(new File(file, fileName)); //删除临时文件 item.delete(); } } System.out.println("文件上传成功"); return "success"; }
}
2.4 配置文件解析器
<!--文件上传 id必须为="multipartResolver" --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!--上传文件的大小,这里设置的是10M--> <property name="maxUploadSize" value="10485760"></property> </bean>
3. 使用SpringMVC方式上传文件
3.1 将控制器修改为
/** * 使用SpringMVC方式上传文件 * MultipartFile upload: 名称应和input的name值一致 * @return */ @RequestMapping("/fileupload02") public String testFileUpload2(HttpServletRequest request, /*@RequestParam(name = "upload") */MultipartFile upload) throws Exception { //使用fileupload组件完成上传文件 //上传的位置 String realPath = request.getSession().getServletContext().getRealPath("/uploads"); System.out.println(realPath); //判断该路径是否存在 File file = new File(realPath); if (!file.exists()){ //创建该文件夹 file.mkdirs(); } String uuid = UUID.randomUUID().toString().replace("-", ""); //文件上传项 String fileName = uuid + "_" + upload.getOriginalFilename(); //完成上传 upload.transferTo(new File(realPath, fileName)); System.out.println("SpringMVC文件上传成功"); return "success"; }
4.SpringMVC跨服务器实现文件上传
4.1 分服务器的目的
分服务器的目的是让服务器各司其职,从而提高项目的运行的效率
4.2 准备两个tomcat服务器,并创建一个用于存放图片的web工程
4.3 pom文件除了依赖文件上传的两个jar,还需要jersey
<!--跨服务器文件上传--> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-core</artifactId> <version>1.18.1</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> <version>1.18.1</version> </dependency>
4.4 将控制器修改为
/** * 跨服务器上传文件 * MultipartFile upload: 名称应和input的name值一致 * @return */ @RequestMapping("/fileupload03") public String testFileUpload3(HttpServletRequest request, MultipartFile upload) throws Exception { System.out.println("跨服务器文件上传"); //使用fileupload组件完成上传文件 //定义上传服务器路径 String path = "http://localhost:9090/uploads/"; //判断该路径是否存在 File file = new File(path); if (!file.exists()){ //创建该文件夹 file.mkdirs(); } String uuid = UUID.randomUUID().toString().replace("-", ""); //文件上传项 String fileName = uuid + "_" + upload.getOriginalFilename(); //创建客户端的对象 Client client = Client.create(); //和图片服务器进行连接 WebResource webResource = client.resource(path + fileName); //完成上传 webResource.put(upload.getBytes()); System.out.println("SpringMVC文件上传成功"); return "success"; }
源码:github
SpringMVC异常处理
作者:PopsiCola
邮箱:liulebinn@163.com
出处:https://www.cnblogs.com/liulebin/
github:https://github.com/PopsiCola 欢迎star~
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。