SpringMVC上传文件FileUpload使用方法详解
本文实例为大家分享了SpringMVC上传文件FileUpload的具体代码,供大家参考,具体内容如下
我是在已经搭建好的springMVC环境下,maven工程中的pom.xml所需要的jar包(其中spring上传文件的两个主要jar:commons-fileupload.jar和commons-io.jar):
4.0.0 com.zhihua SpringMVC_FileUpload war 0.0.1-SNAPSHOT SpringMVC_FileUploadMavenWebapp http://maven.apache.org 3.2.8.RELEASE 4.10 junit junit 3.8.1 test commons-fileupload commons-fileupload 1.3.1 org.springframework spring-core ${spring.version} org.springframework spring-webmvc ${spring.version} org.springframework spring-context ${spring.version} org.springframework spring-context-support ${spring.version} org.springframework spring-aop ${spring.version} org.springframework spring-aspects ${spring.version} org.springframework spring-tx ${spring.version} org.springframework spring-jdbc ${spring.version} org.springframework spring-web ${spring.version} org.springframework spring-test ${spring.version} test jstl jstl 1.2 javax.servlet javax.servlet-api 3.0.1 provided javax.servlet.jsp jsp-api 2.1 provided SpringMVC_FileUpload
在spring-mvc.xml中添加代码:
前端页面(fileUpload.jsp)和上传成功返回页面(success.jsp):
<%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> <%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%>springmvc-文件上传 采用流的方式上传文件
"method="post"enctype="multipart/form-data">
采用multipart提供的file.transfer方法上传文件1
"method="post"enctype="multipart/form-data">
采用multipart提供的file.transfer方法上传文件2
"method="post"enctype="multipart/form-data">
使用springMVC提供的方法上传文件
"method="post"enctype="multipart/form-data">
<%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>Inserttitlehere 文件上传成功!
controller的代码:
packagecom.zhihua.controller;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.util.Date;
importjava.util.Iterator;
importjavax.servlet.http.HttpServletRequest;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestParam;
importorg.springframework.web.multipart.MultipartFile;
importorg.springframework.web.multipart.MultipartHttpServletRequest;
importorg.springframework.web.multipart.commons.CommonsMultipartFile;
importorg.springframework.web.multipart.commons.CommonsMultipartResolver;
@Controller
@RequestMapping("/fileUpload")
publicclassFileUploadController{
/**
*通过流的方式上传文件
*@RequestParam("file")将name=file控件得到的文件封装成CommonsMultipartFile对象
*<请替换成功能描述>
*<请替换成详细描述>
*@paramfile
*@return
*@authorcaizh
*@since[1.0.0]
*@version[1.0.0,2017年2月5日]
*/
@RequestMapping("/upload_01")
publicStringfileUpload_1(@RequestParam("file_01")CommonsMultipartFilefile)throwsIOException{
//用来检测程序运行时间
longstartTime=System.currentTimeMillis();
System.out.println("fileName:"+file.getOriginalFilename());
try{
//获取输出流
OutputStreamos=newFileOutputStream("E:/"+newDate().getTime()+file.getOriginalFilename());
//获取输入流CommonsMultipartFile中可以直接得到文件的流
InputStreamis=file.getInputStream();
inttemp;
//一个一个字节的读取并写入
while((temp=is.read())!=(-1)){
os.write(temp);
}
os.flush();
os.close();
is.close();
}catch(Exceptione){
e.printStackTrace();
}
longendTime=System.currentTimeMillis();
System.out.println("方法一的运行时间:"+String.valueOf(endTime-startTime)+"ms");
return"view/success";
}
/**
*采用file.Transto来保存上传的文件
*<请替换成功能描述>
*<请替换成详细描述>
*@paramfile
*@return
*@throwsIOException
*@authorcaizh
*@since[1.0.0]
*@version[1.0.0,2017年2月5日]
*/
@RequestMapping("/upload_02")
publicStringfileUpload_2(@RequestParam("file_02")CommonsMultipartFilefile)throwsIOException{
longstartTime=System.currentTimeMillis();
System.out.println("fileName:"+file.getOriginalFilename());
Stringpath="E:/"+newDate().getTime()+file.getOriginalFilename();
FilenewFile=newFile(path);
//通过CommonsMultipartFile的方法直接写文件
file.transferTo(newFile);
longendTime=System.currentTimeMillis();
System.out.println("方法二的运行时间:"+String.valueOf(endTime-startTime)+"ms");
return"view/success";
}
/**
*使用MultipartFile上传文件
*<请替换成功能描述>
*<请替换成详细描述>
*@paramfile
*@return
*@authorcaizh
*@since[1.0.0]
*@version[1.0.0,2017年2月5日]
*/
@RequestMapping("/upload_03")
publicStringfileUpload_3(@RequestParam(value="file_03",required=false)MultipartFilefile,
HttpServletRequestrequest){
Stringpath=request.getSession().getServletContext().getRealPath("upload");
System.out.println(path);
StringfileName=file.getOriginalFilename();
FiletargetFile=newFile(path,fileName);
if(!targetFile.exists()){
targetFile.mkdirs();
}
//保存
try{
file.transferTo(targetFile);
}catch(Exceptione){
e.printStackTrace();
}
return"view/success";
}
/**
*采用spring提供的上传文件的方法
*<请替换成功能描述>
*<请替换成详细描述>
*@paramrequest
*@return
*@throwsIllegalStateException
*@throwsIOException
*@authorcaizh
*@since[1.0.0]
*@version[1.0.0,2017年2月5日]
*/
@RequestMapping("/upload_spring")
publicStringspringUpload(HttpServletRequestrequest)throwsIllegalStateException,IOException{
longstartTime=System.currentTimeMillis();
//将当前上下文初始化给CommonsMutipartResolver(多部分解析器)
CommonsMultipartResolvermultipartResolver=newCommonsMultipartResolver(request.getSession().getServletContext());
//检查form中是否有enctype="multipart/form-data"
if(multipartResolver.isMultipart(request))
{
//将request变成多request
MultipartHttpServletRequestmultiRequest=(MultipartHttpServletRequest)request;
//获取multiRequest中所有的文件名
Iteratoriter=multiRequest.getFileNames();
while(iter.hasNext()){
//一次遍历所有的文件
MultipartFilefile=multiRequest.getFile(iter.next().toString());
if(file!=null){
Stringpath="E:/springUpload"+file.getOriginalFilename();
//上传
file.transferTo(newFile(path));
}
}
}
longendTime=System.currentTimeMillis();
System.out.println("方法三的运行时间:"+String.valueOf(endTime-startTime)+"ms");
return"view/success";
}
}
好了,全部代码都给出了,博主是测试成功了,感兴趣的朋友可以去比较不同上传方式的效率!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。