SpringMVC上传文件的三种实现方式
发布时间 - 2026-01-10 22:12:28 点击率:次SpringMVC上传文件的三种实现方式,直接上代码吧,大伙一看便知

前台:
<%@ 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自带的上传文件的方法要快的多!
对于测试二的结果:可能是方法三得挨个搜索,所以要慢点。不过一般情况下我们是方法三,因为他能提供给我们更多的方法
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# springmvc实现上传
# spring
# mvc
# 文件上传
# springmvc
# 上传
# SpringMVC文件上传 多文件上传实例
# Spring MVC中上传文件实例
# springMVC配置环境实现文件上传和下载
# SpringMVC文件上传的配置实例详解
# springMVC结合AjaxForm上传文件
# springMVC实现前台带进度条文件上传的示例代码
# spring mvc实现文件上传并携带其他参数的示例
# 在SpringMVC框架下实现文件的上传和下载示例
# Spring MVC 文件上传的示例代码
# 上传文件
# 我用
# 遍历
# 给我们
# 可以看到
# 三种
# 可以直接
# 这个时候
# 他能
# 自带
# 很慢
# 要快
# 大家多多
# 便知
# 慢点
# 过流
# enctype
# multipart
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
Laravel如何使用查询构建器?(Query Builder高级用法)
长沙企业网站制作哪家好,长沙水业集团官方网站?
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
Swift中switch语句区间和元组模式匹配
常州企业网站制作公司,全国继续教育网怎么登录?
如何获取免费开源的自助建站系统源码?
如何在IIS中新建站点并配置端口与IP地址?
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
西安专业网站制作公司有哪些,陕西省建行官方网站?
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
,南京靠谱的征婚网站?
如何快速生成专业多端适配建站电话?
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
如何用腾讯建站主机快速创建免费网站?
如何在Windows 2008云服务器安全搭建网站?
javascript中对象的定义、使用以及对象和原型链操作小结
Laravel定时任务怎么设置_Laravel Crontab调度器配置
JavaScript如何实现继承_有哪些常用方法
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
UC浏览器如何设置启动页 UC浏览器启动页设置方法
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
Java垃圾回收器的方法和原理总结
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
昵图网官方站入口 昵图网素材图库官网入口
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
如何彻底删除建站之星生成的Banner?
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
如何快速搭建支持数据库操作的智能建站平台?
如何用好域名打造高点击率的自主建站?
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
如何快速完成中国万网建站详细流程?
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
Laravel如何处理表单验证?(Requests代码示例)
如何在VPS电脑上快速搭建网站?
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
简单实现jsp分页
EditPlus中的正则表达式实战(5)
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑

