当前位置:首页 > Java技术 > SpringMVC上传文件的三种方式

SpringMVC上传文件的三种方式

2022年08月04日 19:00:19Java技术2

直接上代码吧,大伙一看便知

这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/commonsmultipartresolver.java.html

前台:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<form name="serForm" action="/SpringMVC006/fileUpload" method="post"  enctype="multipart/form-data">
<h1>采用流的方式上传文件</h1>
<input type="file" name="file">
<input type="submit" value="upload"/>
</form>

<form name="Form2" action="/SpringMVC006/fileUpload2" method="post"  enctype="multipart/form-data">
<h1>采用multipart提供的file.transfer方法上传文件</h1>
<input type="file" name="file">
<input type="submit" value="upload"/>
</form>

<form name="Form2" action="/SpringMVC006/springUpload" method="post"  enctype="multipart/form-data">
<h1>使用spring mvc提供的类的方法上传文件</h1>
<input type="file" name="file">
<input type="submit" value="upload"/>
</form>
</body>
</html>

配置:

	<!-- 多部分文件上传 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
         <property name="maxUploadSize" value="104857600" />
         <property name="maxInMemorySize" value="4096" />
         <property name="defaultEncoding" value="UTF-8"></property>
    </bean>

 

后台:

方式一:

/*
	 * 通过流的方式上传文件
	 * @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象
	 */
	@RequestMapping("fileUpload")
	public String  fileUpload(@RequestParam("file") CommonsMultipartFile file) throws IOException {
	    
		
	    //用来检测程序运行时间
	    long  startTime=System.currentTimeMillis();
	    System.out.println("fileName:"+file.getOriginalFilename());
	    
		try {
			//获取输出流
			OutputStream os=new FileOutputStream("E:/"+new Date().getTime()+file.getOriginalFilename());
		    //获取输入流 CommonsMultipartFile 中可以直接得到文件的流
		    InputStream is=file.getInputStream();
		    int temp;
		    //一个一个字节的读取并写入
		    while((temp=is.read())!=(-1))
		    {
		    	os.write(temp);
		    }
		   os.flush();
		   os.close();
		   is.close();
		
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		long  endTime=System.currentTimeMillis();
		System.out.println("方法一的运行时间:"+String.valueOf(endTime-startTime)+"ms");
		return "/success";	
	}

 方式二:

 

/*
	 * 采用file.Transto 来保存上传的文件
	 */
	@RequestMapping("fileUpload2")
	public String  fileUpload2(@RequestParam("file") CommonsMultipartFile file) throws IOException {
		 long  startTime=System.currentTimeMillis();
		System.out.println("fileName:"+file.getOriginalFilename());
		String path="E:/"+new Date().getTime()+file.getOriginalFilename();
		
		File newFile=new File(path);
		//通过CommonsMultipartFile的方法直接写文件(注意这个时候)
		file.transferTo(newFile);
		long  endTime=System.currentTimeMillis();
		System.out.println("方法二的运行时间:"+String.valueOf(endTime-startTime)+"ms");
		return "/success";	
	}

 

 方式三:

 

/*
	 *采用spring提供的上传文件的方法
	 */
	@RequestMapping("springUpload")
	public String  springUpload(HttpServletRequest request) throws IllegalStateException, IOException
	{
		 long  startTime=System.currentTimeMillis();
		 //将当前上下文初始化给  CommonsMutipartResolver (多部分解析器)
		CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(
				request.getSession().getServletContext());
		//检查form中是否有enctype="multipart/form-data"
		if(multipartResolver.isMultipart(request))
		{
			//将request变成多部分request
			MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
		   //获取multiRequest 中所有的文件名
			Iterator iter=multiRequest.getFileNames();
			
			while(iter.hasNext())
			{
				//一次遍历所有文件
				MultipartFile file=multiRequest.getFile(iter.next().toString());
				if(file!=null)
				{
					String path="E:/springUpload"+file.getOriginalFilename();
					//上传
					file.transferTo(new File(path));
				}
				
			}
		  
		}
		long  endTime=System.currentTimeMillis();
		System.out.println("方法三的运行时间:"+String.valueOf(endTime-startTime)+"ms");
	return "/success";	
	}

我们看看测试上传的时间:

第一次我用一个4M的文件:

fileName:test.rar
方法一的运行时间:14712ms
fileName:test.rar
方法二的运行时间:5ms
方法三的运行时间:4ms

 

第二次:我用一个50M的文件
方式一进度很慢,估计得要个5分钟

方法二的运行时间:67ms
方法三的运行时间:80ms

 

从测试结果我们可以看到:用springMVC自带的上传文件的方法要快的多!

对于测试二的结果:可能是方法三得挨个搜索,所以要慢点。不过一般情况下我们是方法三,因为他能提供给我们更多的方法

 

 

 

 

 

 

 

 

作者:Jackvin
来源链接:https://www.cnblogs.com/fjsnail/p/3491033.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/17490.html

标签: SpringMVC
分享给朋友:

“SpringMVC上传文件的三种方式” 的相关文章

springmvc之pojo

标签: springmvc springmvc学习笔记12-springmvc注解开发之包装类型参数绑定 需求 实现方法 页面参数和controller方法形参定义 本文主要介绍注解开发的介绍包装类型的参数绑定 需求 商品查询controller方法中实现商品查询条...

SpringMVC配置没问题却却找不到页面,页面显示404

SpringMVC配置没问题却却找不到页面,页面显示404

在Artifacts下此工程下新建一个lib文件夹,存放jar包,因为idea新建modules的时候不是直接创建的web项目: 选中lib点加号把jar导入进去,然后重启tomcat 作者:春_ 来源链接:https://b...

SpringBoot和SpringMVC的区别

SpringBoot和SpringMVC的区别

一 面试提问 👨‍💻面试官:SpringBoot和SpringMVC的区别 🙋我: 形式上:SpringBoot是一个自动化配置的工具;SpringMVC是一个web框架 在搭建项目时:SpringMVC需要手动配置xml...

Spring与SpringMVC的区别

Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring。 简单点的话可以将SpringMVC类比于Struts。 Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能...

SpringMvc两种实现

SpringMvc两种实现

SpringMvc搭建 了解mvc 什么是MVC MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。 是将业务逻辑、数据、显示分离的方法来组织代码。...

springmvc常见乱码处理

用三层架构做项目时,有时处理不当就经常是乱码问题,我也尝尝为此感到头疼,先说说我的方法,数据库建表用的字符编码方式最好和开发工具使用的字符编码保持一致,utf-8,utf-16等等。 1,响应头导致有乱码 一般都是在doget或者dopost方式中设置编码方式...

SpringMVC重定向

SpringMVC重定向

一、springMVC重定向有两种方式 @Controller @RequestMapping("/OA") public class RedirectService { @RequestMapping(value="/index") public String te...

spring mvc 请求转发和重定向

spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ 1. 需求背景     需求:spr...

Spring MVC 3 深入总结

Spring MVC 3 深入总结

  一、前言: 大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了。Spring3 MVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也...

【SpringMVC】SpringMVC配置FastJson

【SpringMVC】SpringMVC配置FastJson

目前网络上传递数据大部分都是json和xml,但是xml使用的很少了,这里主要介绍json,一般来说json常用的场景是提供外部接口,请求内使用request域就足够了 springmvc对于json的支持,上图 1.请求json方式分析 如果...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。