SpringMVC WEB应用上传照片的实现
使用是SpringMVC+Hibernate搭建的WEB应用,使用jsp写的前端页面。
如何将文件上传到服务器呢?我这里使用的是Multipart的形式将文件上传。
这里有两大步:一是配置multipart解析器,二是处理multipart请求。
DispatcherServlet并没有实现任何解析multipart请求数据的功能。它将这个任务委托给Spring中的MultipartResolver 接口来实现。Spring3.1开始,Spring内置了两个MultipartResolver的实现。
①、CommonsMultipartResolver:使用Jakarta Commons FileUpload解析multipart 请求;
使用这个实现需要依赖其他jar包。commons-fileupload jar包和 commons-io jar包
如果你的WEB应用的容器是Servlet3.0以下的,那么就需要使用CommonsMultipartResolver来解决了。比如你使用的是Tomcat,那么如果是7.0以前的版本就是servlet3.0以下的(不太确定)。
②、StandardServletMultipartResolver:依赖于Servlet3.0对multipart请求的支持。
下面我使用的是第一种解析器:CommonsMultipartResolver 来完成上传文件的任务
一、使用CommonsMultipartResolver 来完成上传文件的任务
一)、配置解析器
①、添加commons-fileupload-1.3.2 jar包、commons-io-2.5 jar包
②、创建一个配置类,配置 MultipartResolver
- package com.zcd.config;
- import java.io.IOException;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.ComponentScan;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.core.io.FileSystemResource;
- import org.springframework.web.multipart.MultipartResolver;
- import org.springframework.web.multipart.commons.CommonsMultipartResolver;
- @Configuration
- @ComponentScan
- public class MyConfig
- {
- @Bean
- public MultipartResolver multipartResolver() throws IOException
- {
- CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
- //指定上传文件的临时存储路径。
- multipartResolver.setUploadTempDir(new FileSystemResource("E:/fileUploadTest_1"));
- return multipartResolver;
- }
- }
二)、处理multipart请求
①、先用jsp写一个表单,如下:
- <form:form action="${pageContext.request.contextPath}/userController/save" method="POST"
- modelAttribute="user" enctype="multipart/form-data" >
- <form:hidden path="id"/>
- 姓名:<form:input path="name"/>
- <br>
- <form:hidden path="photo"/>
- 照片:<input type="file" name="photo1" accept="image/jpeg,image/png,image/gif" >
- <br>
- <input type="submit" name="Submit" value="保存" >
- </form:form>
表单对应的前端界面:
②、响应的Controller中的方法,这里以字节数组的形式接受上传的文件。
- /*
- * 以字节数组的形式接收上传的文件,如果要是上传多个文件的话,就要在加一个参数。这样会非常不方便。
- */
- @RequestMapping(value="save", method=RequestMethod.POST)
- public String save(@RequestPart(value="photo1") byte[] photo, User user)
- {
- /*
- * 表单中的name属性值必须和@RequestPart的value属性值相等,而且还要以字节数组的形式接受上传的文件。
- * 以字节数组的方式接收就不能查看文件的相关信息。
- */
- //这里如何将的photo的全路径获取??????不能获取就不能将文件的路径保存到数据库中。
- userService.save(user);
- return "success";
- }
文件上传到了配置解析器时指定的目录中:
--------------------------------------------------------------------------------------------------------------------
如果想上传多个文件呢??怎么办???可以MultipartFile数组的形式接收上传的文件。
jsp代码:
- <form:form action="${pageContext.request.contextPath}/userController/uploadPotos" method="POST" modelAttribute="user" enctype="multipart/form-data" >
- <form:hidden path="id"/>
- 姓名:<form:input path="name"/>
- <br>
- <form:hidden path="photo"/>
- 图片1:<input type="file" name="files" accept="image/jpeg,image/png,image/gif" >
- <br>
- 图片2:<input type="file" name="files" accept="image/jpeg,image/png,image/gif" >
- <br>
- <input type="submit" name="Submit" value="保存" >
- </form:form>
注意:①、本例中name属性中的属性值files,要和Controller中的方法的相应的参数名相同如: @RequestPart MultipartFile[] files
②、本例中的User对象只有一个photo字段,所以只能保存一个文件在磁盘上的路径,这里是为了方便,没有再增加一个字段来保存第二张图片的路径。这里仅仅是为了示范如何以MultipartFile数组的形式接收多个文件的。
可以使用MultipartFile接口接收上传的文件。需要修改Controller中的处理方法。代码如下:
- /*
- * 以MultipartFile的形式接收文件,而且可以只需要一个@RequestPart 注解,以MultipartFile[] 数组的形式接收上传的文件。
- */
- @RequestMapping(value="uploadPotos")
- public String uploadPotos(@RequestPart MultipartFile[] files, User user) throws IllegalStateException, IOException
- {
- //将第一个file对象的全路径作为User的photo字段的值保存到数据库中。
- MultipartFile file = files[0];
- String filePath = "E:/fileUploadTest_1/" + file.getOriginalFilename();
- user.setPhoto(filePath);
- userService.save(user);
- for(MultipartFile f : files)
- {
- System.out.println("文件原始名称:" + f.getOriginalFilename());
- /*
- * 以MultipartFile的形式接受上传的文件,那么之前在配置解析器的时候指定的保存上传文件的目录就不行了。
- * 这里使用MultipartFile给我们提供的transferTo()方法将文件保存到文件系统中。
- */
- f.transferTo(new File("E:/fileUploadTest_1/" + f.getOriginalFilename()));
- }
- return "success";
- }
将文件保存到系统目录后的截图
二、使用StandardServletMultipartResolver 解析器来完成上传文件的任务
一)、配置StandardServletMultipartResolver 解析器
这个不需要依赖额外的jar包
- package com.zcd.config;
- import java.io.IOException;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.ComponentScan;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.web.multipart.MultipartResolver;
- import org.springframework.web.multipart.support.StandardServletMultipartResolver;
- @Configuration
- @ComponentScan
- public class MyConfig
- {
- @Bean
- public MultipartResolver multipartResolver() throws IOException
- {
- return new StandardServletMultipartResolver();
- }
- }
为上传的文件指定一个临时路径、还可以配置其他的如文件的大小等等
使用web.xml来配置
- <servlet>
- <servlet-name>springDispatcherServlet</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:springmvc.xml</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- <!-- 支持文件上传 -->
- <multipart-config>
- <!-- 指定上传的文件的临时存储目录 -->
- <location>E:/multipartTest4</location>
- </multipart-config>
- </servlet>
二)、处理Multipart请求
- @RequestMapping(value="uploadPotos")
- public String uploadPotos(@RequestPart MultipartFile[] files, User user) throws IllegalStateException, IOException
- {
- for(MultipartFile f : files)
- {
- System.out.println("文件原始名称:" + f.getOriginalFilename().substring(f.getOriginalFilename().lastIndexOf("\\") + 1));
- /*
- * 以MultipartFile的形式接受上传的文件,那么之前在配置解析器的时候指定的保存上传文件的目录就不行了。
- * 这里使用MultipartFile给我们提供的transferTo()方法将文件保存到文件系统中。
- * 使用StandardServletMultipartResolver解析器与CommonsMultipartResolver解析器有一个不同的地方,就是getOriginalFileName()方法获取得到的名称不一样,一个是获取到全路径,一个仅仅是获取文件名称。
- */
- String filePath = "E:/fileUploadTest_2/" + f.getOriginalFilename().substring(f.getOriginalFilename().lastIndexOf("\\") + 1);
- f.transferTo(new File(filePath));
- user.setPhoto(filePath);
- userService.save(user);
- }
- return "list2";
- }
SpringMVC WEB应用上传照片的实现的更多相关文章
- SpringMVC整合fastdfs-client-java实现web文件上传下载
原文:http://blog.csdn.net/wlwlwlwl015/article/details/52682153 本篇blog主要记录一下SpringMVC整合FastDFS的Java客户端实 ...
- springmvc图片文件上传接口
springmvc图片文件上传 用MultipartFile文件方式传输 Controller package com.controller; import java.awt.image.Buffer ...
- SpringMVC学习--文件上传
简介 文件上传是web开发中常见的需求之一,springMVC将文件上传进行了集成,可以方便快捷的进行开发. springmvc中对多部件类型解析 在 页面form中提交enctype="m ...
- Spring +SpringMVC 实现文件上传功能。。。
要实现Spring +SpringMVC 实现文件上传功能. 第一步:下载 第二步: 新建一个web项目导入Spring 和SpringMVC的jar包(在MyEclipse里有自动生成spring ...
- springMVC+jsp+ajax上传文件
工作中遇到的小问题,做个笔记 实现springMVC + jsp + ajax 上传文件 HTML <body> <form id="myform" method ...
- Java Web文件上传
参考资料:http://www.cnblogs.com/xdp-gacl/p/4200090.html 一.问题描述 Java Web文件上传需要借助一些第三方库,常用的是借助Apache的包,有两个 ...
- SpringMVC的文件上传
首先导入jar包 在springMVC里面配置文件上传,以及限定上传文件的大小 <bean id="multipartResolver" class="org.s ...
- SpringMVC之文件上传异常处理
一般情况下,对上传的文件会进行大小的限制.如果超过指定大小时会抛出异常,一般会对异常进行捕获并友好的显示出来.以下用SpringMVC之文件上传进行完善. 首先配置CommonsMultipartRe ...
- Web 文件上传 目录
0. SpringMVC -- 梗概--源码--贰--上传 1. Web上传文件的原理及实现 2. Web文件上传方法总结大全 3. SpringMVC 文件上传配置,多文件上传,使用的Multipa ...
随机推荐
- [Git & GitHub] 利用Git Bash进行第一次提交文件
转载:https://blog.csdn.net/dietime1943/article/details/72420042 利用Git Bash进行第一次提交文件 快下班的时候,MD群里有人问怎么向g ...
- php对图片加水印--将一张图片作为水印加到另一张图片
代码如下: /** * 图片加水印(适用于png/jpg/gif格式) * * @param $srcImg 原图片 * @param $waterImg 水印图片 * @param $s ...
- log4j 简单用法
maven添加必要库: <!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <gro ...
- MSSqlServer 数据库降级及数据转移
--MSSqlServer数据库降级及数据转移--MS SQL SERVER高版本数据库(Database_A)恢复数据到低版本数据库(Database_B)中--1.数据库结构对象(包含表.视图.函 ...
- PS基础,英语
PS基础(矢量图案的绘制) 水平参考线:新建背景(长宽一致,背景内容为透明)---设置水平参考线(水平垂直都要)---完成. 背景制作:设置前景色---用矩形选框工具绘制正方形选区(背景已被参考线平分 ...
- .Net程序员玩转Android系列之一~Java快速入门
前言 前段时间受公司业务发展需要,探索性进入Android开发领域.一切从零开始,java基础,Java进阶,Android框架学习,Eclipse熟悉,最终到第一个即时通讯App完成,历经一个月的时 ...
- spring历史和哲学
spring 历史: 2004年 Spring Framework 1.0 final 正式问世. 1.在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分 ...
- UrlRewrite 的配置和使用总结
UrlRewrite就是我们通常说的地址重写,用户得到的全部都是经过处理后的URL地址. 主要优点 一:提高安全性,可以有效的避免一些参数名.ID等完全暴露在用户面前,如果用户随便乱输的话,不 ...
- the resource is not on the build path of a php project
打开工程里面的.project文件,确保里面的红色标记行都正确且存在,即可成功! <?xml version="1.0" encoding="UTF-8" ...
- window7下搭建本机版git并在本机上进行代码管理
1.安装软件:Git-1.9.2-preview20140411.exe与TortoiseGit-1.8.8.0-64bit.msi 2.在本机任一目录下执行如下操作: 3.创建一个test.java ...