文件上传是项目开发中常用的功能。为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data。只有在这种情况下,浏览器才会把用户选择的文件二进制数据发送给服务器。
Spring MVC为文件上传提供了直接的支持,这种支持是用即插即用的MultipartResolver实现的。Spring MVC使用Apache Commons fileupload技术实现了一个MultipartResolver实现类:CommonsMultipartResolver.所以Spring MVC的文件上传依赖Apache Commons fileupload的组件。
Spring MVC会将上传文件绑定到MultipartFile对象中,该对象提供了获取上传文件内容,文件名等方法。通过transferTo()方法还可以将文件存储到硬件中。
MultipartFile常用方法如下:
*bye[] getBytes() :获取文件数据
*String getContentType() :获取文件MIME类型
*InputStream getIputStream() :获取文件流
*String getName() :获取表单中文件组件的名字
*String getOriginalFilename() :获取上传文件的原名
*boolean isEmpty() :是否有上传的文件
*void transferTo(File dest) :将文件保存到一个目标文件中
<!-- 配置前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
<!-- spring可以自动去扫描base-package下面的包或者子包下面的java类 如果扫描到有spring相关注解的类,则吧这个类注册为spring的bean --> <context:component-scan base-package="com.dj.controller" /> <!-- 配置MultipartResolver --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 上传文件大小限制,单位为字节-10Mb --> <property name="maxUploadSize"> <value>10485760</value> </property> <!-- 请求的编码格式 --> <property name="defaultEncoding"> <value>UTF-8</value> </property> </bean> <!-- 默认装配 --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 前缀 --> <property name="prefix"> <value>/</value> </property> <!-- 后缀 --> <property name="suffix"> <value>.jsp</value> </property> </bean>
在浏览器中输入如下地址
http://localhost:8888/FileUploadTest/registPage
点击提交,可以看到
这个文件的保存位置在你工作空间\.metadata\.plugins\org.eclipse.wst.server.core\的一个tmp下的\wtpwebapps\FileUploadTest\images\这个目录下
你可以在控制台打印保存文件路径位置再根据路径去本地找
想看到文件具体位置可以把上传文件位置改为
user.getImage().transferTo(new File("D:\\"+filename));这时候就可以在d盘下面看到上传的文件
源码下载地址:https://files.cnblogs.com/files/dj-blog/FileUploadTest.zip
接下来我们再看文件下载:http://www.cnblogs.com/dj-blog/p/7535340.html
转载于:https://www.cnblogs.com/dj-blog/p/7535101.html
