Java 文件上传 以及 springmvc实现文件上传
来源:互联网 发布:jsp端口更改 编辑:程序博客网 时间:2024/04/30 08:09
第一种方式
自定义servlet实现文件上传和下载(基本还是以字节流进行文件上传下载)
http://www.cnblogs.com/xdp-gacl/p/4200090.html
引入commons-io包
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version></dependency>
常用的方法
获取文件名
filename = filename.substring(filename.lastIndexOf("\\")+1);
获取扩展名
String fileExtName = filename.substring(filename.lastIndexOf(".")+1);
在文件下载是,form 设置参数
enctype="multipart/form-data"
规定上传到服务器的参数包括 文件类型 。
第二种方式
使用springMVC包装的解析器 进行文件上传
这里要用到springMvc的 CommonsMultipartResolver 包
1 在web.xml中定义springMvc servlet以及映射关系
<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:spring/applicationContext-springMvc.xml</param-value></init-param><load-on-startup>1</load-on-startup><async-supported>true</async-supported></servlet><servlet-mapping><servlet-name>SpringMVC</servlet-name><!-- 此处可以可以配置成 *.do ,对应struts的后缀习惯 --><url-pattern>*.htm</url-pattern></servlet-mapping>
2 applicationContext-springMvc.xml引入springmvc上传组件包 CommonsMultipartResolver ,可以通过spring ICO动态注入到程序中,(注意:视图解析以及注解扫描也是在这里配置)
查看源码 ,发现 CommonsMultipartResolver该类实现了ServletContextAware接口,对于实现了该接口的类都可以获取ServletContext
同时他也继承了CommonsFileUploadSupport,该类也是通过commons-io包,利用org.apache.commons.fileupload对文件上传的进行实现
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--上面的xsd最好和当前使用的Spring版本号一致,如果换了Spring版本,这个最好也跟着改--> <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 --> <context:component-scan base-package="com.youmeek.ssm.**.controller"/> <!-- 配置注解驱动 --> <mvc:annotation-driven/> <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀(如果最后一个还是表示文件夹,则最后的斜杠不要漏了) 使用JSP--> <!-- 默认的视图解析器 在上边的解析错误时使用 (默认使用html)- --> <bean id="viewResolver" abstract="true"> <property name="attributes"> <props> <prop key="resRoot">${allways.cc.resRoot}</prop> <prop key="pageTitle">${allways.cc.pageTitle}</prop> </props> </property> </bean> <bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" parent="viewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/view/"/><!--设置JSP文件的目录位置--> <property name="suffix" value=".jsp"/> <property name="contentType" value="text/html;charset=utf-8"/> </bean> <!-- 文件上传 start 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 默认编码 --> <property name="defaultEncoding" value="UTF-8"/> <!-- 文件大小最大值 上传文件大小限制为10M,10*1024*1024 --> <property name="maxUploadSize" value="10485760"/> <!-- 内存中的最大值 --> <property name="maxInMemorySize" value="4096"/> </bean> <!--文件上传 end--></beans>
3.测试代码
package com.youmeek.ssm.module.user.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import org.springframework.web.multipart.commons.CommonsMultipartResolver;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.File;import java.io.IOException;import java.util.Iterator;/** * 使用SpringMvc实现文件上传 */@Controller@RequestMapping("/file")public class UploadController { //创建一个springmvc上传文件解析器 @Autowired CommonsMultipartResolver multipartResolver; @RequestMapping("/upload2" ) public String upload2(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException { //判断 request 是否有文件上传,即多部分请求 if(multipartResolver.isMultipart(request)){ //转换成多部分request MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request; //取得request中的所有文件名 Iterator<String> iter = multiRequest.getFileNames(); while(iter.hasNext()){ //记录上传过程起始时的时间,用来计算上传时间 int pre = (int) System.currentTimeMillis(); //取得上传文件 MultipartFile file = multiRequest.getFile(iter.next()); if(file != null){ //取得当前上传文件的文件名称 String myFileName = file.getOriginalFilename(); //如果名称不为“”,说明该文件存在,否则说明该文件不存在 if(myFileName.trim() !=""){ System.out.println(myFileName); //重命名上传后的文件名 String fileName = "demoUpload" + file.getOriginalFilename(); //定义上传路径// String path = "H:/" + fileName; String path = request.getSession().getServletContext().getRealPath("/WEB-INF/upload") + fileName; File localFile = new File(path); try { file.transferTo(localFile); } catch (IOException e) { e.printStackTrace(); } } } //记录上传该文件后的时间 int finaltime = (int) System.currentTimeMillis(); System.out.println(finaltime - pre); } } return "/success"; }}
结果:
10597
0
avaiuk.sql
使用CommonsMultipartResolver 包装器,在导入前首先会对存在在内存中的需要导入的数据进行查找,如果有则直接从内存中进行导入,从而减少IO操作。通过输出结果可以看到,该上传是对第一种的优化。
附:jsp文件
<%@ page language="java" pageEncoding="UTF-8"%><!DOCTYPE HTML><html><head> <title>文件上传</title></head><body><form action="${pageContext.request.contextPath}/file/upload2.htm" enctype="multipart/form-data" method="post"> 上传用户:<input type="text" name="username"><br/> 上传文件1:<input type="file" name="file1"><br/> 上传文件2:<input type="file" name="file2"><br/> <input type="submit" value="提交"></form></body></html>
- Java 文件上传 以及 springmvc实现文件上传
- java实现简单文件复制(文件上传)以及springMVC中上传文件方式
- SpringMVC 实现文件上传
- SpringMVC文件上传实现
- SpringMVC实现文件上传
- SpringMVC 实现文件上传
- SpringMVC实现文件上传
- SpringMVC文件上传实现
- springMVC实现文件上传
- springMVC实现文件上传
- springMVC实现文件上传
- SpringMvc实现文件上传
- SpringMVC实现文件上传
- springmvc实现文件上传
- SpringMVC实现文件上传
- springMVC----实现文件上传
- springMVC实现文件上传
- SpringMVC实现文件上传
- C/C++ OpenCV五种滤波器综合示例
- Java Vector 集合
- d3.js检索mysql数据
- 20170109Python学习规划
- java基础黑马程序员经典题目
- Java 文件上传 以及 springmvc实现文件上传
- Spring中的事务管理
- C 数据结构 大中小三种轮渡计算过河时间问题实现
- ACM篇:Uva 122 -- Trees on the level
- 深入理解Java之线程池
- java环境变量配置
- Python中__builtin__模块和__builtins__模块的区别和联系
- android_53_进程优先级
- Problem A. Password Attacker