问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

springmvc实现文件的上传和下载

发布网友 发布时间:2024-09-26 17:03

我来回答

1个回答

热心网友 时间:2024-10-01 12:05

文件上传是项目开发中最常见的功能之一 ,springMVC 可以很好的支持文件上传,但是SpringMVC上下文中默认没有装配MultipartResolver,因此默认情况下其不能处理文件上传工作。如果想使用Spring的文件上传功能,则需要在上下文中配置MultipartResolver。

前端表单要求:为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data。只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给服务器;

对表单中的 enctype 属性做个详细的说明:

application/x-www=form-urlencoded:默认方式,只处理表单域中的 value 属性值,采用这种编码方式的表单会将表单域中的值处理成 URL 编码方式。

multipart/form-data:这种编码方式会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数中,不会对字符编码。

text/plain:除了把空格转换为 "+" 号外,其他字符都不做编码处理,这种方式适用直接通过表单发送邮件。

<form?action=""?enctype="multipart/form-data"?method="post">???<input?type="file"?name="file"/>???<input?type="submit"></form>

一旦设置了enctype为multipart/form-data,浏览器即会采用二进制流的方式来处理表单数据,而对于文件上传的处理则涉及在服务器端解析原始的HTTP响应。在2003年,Apache Software Foundation发布了开源的Commons FileUpload组件,其很快成为Servlet/JSP程序员上传文件的最佳选择。

Servlet3.0规范已经提供方法来处理文件上传,但这种上传需要在Servlet中完成。

而Spring MVC则提供了更简单的封装。

Spring MVC为文件上传提供了直接的支持,这种支持是用即插即用的MultipartResolver实现的。

Spring MVC使用Apache Commons FileUpload技术实现了一个MultipartResolver实现类:

CommonsMultipartResolver。因此,SpringMVC的文件上传还需要依赖Apache Commons FileUpload的组件。

文件上传

1、导入文件上传的jar包,commons-fileupload , Maven会自动帮我们导入他的依赖包 commons-io包;

<!--文件上传--><dependency>???<groupId>commons-fileupload</groupId>???<artifactId>commons-fileupload</artifactId>???<version>1.3.3</version></dependency><!--servlet-api导入高版本的--><dependency>???<groupId>javax.servlet</groupId>???<artifactId>javax.servlet-api</artifactId>???<version>4.0.1</version></dependency>

2、配置bean:multipartResolver

【注意!!!这个bena的id必须为:multipartResolver , 否则上传文件会报400的错误!在这里栽过坑,教训! 】

<!--文件上传配置--><bean?id="multipartResolver"??class="org.springframework.web.multipart.commons.CommonsMultipartResolver">???<!--?请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1?-->???<property?name="defaultEncoding"?value="utf-8"/>???<!--?上传文件大小上限,单位为字节(10485760=10M)?-->???<property?name="maxUploadSize"?value="10485760"/>???<property?name="maxInMemorySize"?value="40960"/></bean>

CommonsMultipartFile 的 常用方法:

String getOriginalFilename():获取上传文件的原名

InputStream getInputStream():获取文件流

void transferTo(File dest):将上传文件保存到一个目录文件中

我们去实际测试一下

3、编写前端页面

<form?action="/upload"?enctype="multipart/form-data"?method="post">?<input?type="file"?name="file"/>?<input?type="submit"?value="upload"></form>

4、Controller

package?com.kuang.controller;import?org.springframework.stereotype.Controller;import?org.springframework.web.bind.annotation.RequestMapping;import?org.springframework.web.bind.annotation.RequestParam;import?org.springframework.web.multipart.commons.CommonsMultipartFile;import?javax.servlet.http.HttpServletRequest;import?java.io.*;@Controllerpublic?class?FileController?{???//@RequestParam("file")?将name=file控件得到的文件封装成CommonsMultipartFile?对象???//批量上传CommonsMultipartFile则为数组即可???@RequestMapping("/upload")???public?String?fileUpload(@RequestParam("file")?CommonsMultipartFile?file?,?HttpServletRequest?request)?throws?IOException?{???????//获取文件名?:?file.getOriginalFilename();???????String?uploadFileName?=?file.getOriginalFilename();???????//如果文件名为空,直接回到首页!???????if?("".equals(uploadFileName)){???????????return?"redirect:/index.jsp";??????}???????System.out.println("上传文件名?:?"+uploadFileName);???????//上传路径保存设置???????String?path?=?request.getServletContext().getRealPath("/upload");???????//如果路径不存在,创建一个???????File?realPath?=?new?File(path);???????if?(!realPath.exists()){???????????realPath.mkdir();??????}???????System.out.println("上传文件保存地址:"+realPath);???????InputStream?is?=?file.getInputStream();?//文件输入流???????OutputStream?os?=?new?FileOutputStream(new?File(realPath,uploadFileName));?//文件输出流???????//读取写出???????int?len=0;???????byte[]?buffer?=?new?byte[1024];???????while?((len=is.read(buffer))!=-1){???????????os.write(buffer,0,len);???????????os.flush();??????}???????os.close();???????is.close();???????return?"redirect:/index.jsp";??}}

5、测试上传文件,OK!

采用file.Transto 来保存上传的文件

1、编写Controller

/**?采用file.Transto?来保存上传的文件*/@RequestMapping("/upload2")public?String??fileUpload2(@RequestParam("file")?CommonsMultipartFile?file,?HttpServletRequest?request)?throws?IOException?{???//上传路径保存设置???String?path?=?request.getServletContext().getRealPath("/upload");???File?realPath?=?new?File(path);???if?(!realPath.exists()){???????realPath.mkdir();??}???//上传文件地址???System.out.println("上传文件保存地址:"+realPath);???//通过CommonsMultipartFile的方法直接写文件(注意这个时候)???file.transferTo(new?File(realPath?+"/"+?file.getOriginalFilename()));???return?"redirect:/index.jsp";}

2、前端表单提交地址修改

3、访问提交测试,OK!

文件下载

文件下载步骤:

1、设置 response 响应头

2、读取文件 -- InputStream

3、写出文件 -- OutputStream

4、执行操作

5、关闭流 (先开后关)

代码实现:

@RequestMapping(value="/download")public?String?downloads(HttpServletResponse?response?,HttpServletRequest?request)?throws?Exception{???//要下载的图片地址???String??path?=?request.getServletContext().getRealPath("/upload");???String??fileName?=?"基础语法.jpg";???//1、设置response?响应头???response.reset();?//设置页面不缓存,清空buffer???response.setCharacterEncoding("UTF-8");?//字符编码???response.setContentType("multipart/form-data");?//二进制传输数据???//设置响应头???response.setHeader("Content-Disposition",???????????"attachment;fileName="+URLEncoder.encode(fileName,?"UTF-8"));???File?file?=?new?File(path,fileName);???//2、?读取文件--输入流???InputStream?input=new?FileInputStream(file);???//3、?写出文件--输出流???OutputStream?out?=?response.getOutputStream();???byte[]?buff?=new?byte[1024];???int?index=0;???//4、执行?写出操作???while((index=?input.read(buff))!=?-1){???????out.write(buff,?0,?index);???????out.flush();??}???out.close();???input.close();???return?null;}

前端

<a?href="/download">点击下载</a>

测试,文件下载OK

原文:https://juejin.cn/post/7095226063470460942

springmvc实现文件的上传和下载

Spring MVC使用Apache Commons FileUpload技术实现了一个MultipartResolver实现类:CommonsMultipartResolver。因此,SpringMVC的文件上传还需要依赖Apache Commons FileUpload的组件。文件上传 1、导入文件上传的jar包,commons-fileupload , Maven会自动帮我们导入他的依赖包 commons-io包;&lt;!--文件上传--&gt;&lt;depen...

使用MultipartFile上传文件

在项目开发中,文件上传是常用功能之一,包括表单上传、ajax上传、插件上传等三种方式。其中,MultipartFile是Spring MVC官方提供的一种完善文件上传组件,具备丰富的功能。MultipartFile的两个主要实现类使得文件上传更加灵活和高效。为了在项目中使用它,需要加入对应的依赖。在前端上传文件时,必须使用multipart/f...

springboot多文件上传

首先,需要在Spring Boot的配置类中配置MultipartResolver,以支持文件上传功能。通常可以通过配置`MultipartConfigElement`或者继承`WebMvcConfigurer`来自定义配置。二、创建文件上传接口 创建一个处理文件上传的接口,使用`@PostMapping`注解来响应文件上传的HTTP请求。请求参数使用`@RequestParam`注解,并指定参数...

SpringMVC使用commons fileupload 上传文件,parseRequest(request...

既然你已经用了Spring MVC,就没有必要自己写上传的代码了,这样做 下一个这样的方法,把MultipartFile传进去 public String upload(@RequestParam(value = "image") MultipartFile image)然后就可以这样做了 image.transferTo(new File("想要保存到哪里"));image还有其他的方法,自己看一下就可以了 XML...

Spring MVC 采用 MultipartFile 上传文件,文件名中存在中文乱码_百度...

Spring MVC 采用 MultipartFile 上传文件,文件名中存在中文乱码 文件上传流程,首先文件是在页面上传到node接口,然后在通过node传到后台controller附件中的两张图:分别是controller和node代码,最后一个上传后的文件。说明一下:最后的文件名=规则... 文件上传流程,首先文件是在页面上传到node接口,然后在通过node传到后台...

Spring mvc 文件上传的问题。@RequestParam(required = false)_百度知...

&lt;!--文件上传spring配置--&gt; &lt;bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"&gt; &lt;!--文件限定为8M--&gt; &lt;property name="maxUploadSize" value="8388608"&gt;&lt;/property&gt; &lt;/bean&gt; 引包,我这是maven。其他架构,你可以自己下jar &lt;!--文件上传--&gt;...

如何在spring mvc中上传图片并显示出来

(1)在spring mvc的配置文件中配置:&lt;bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"&gt; &lt;property name="uploadTempDir" value="/tmp" /&gt; &lt;!-- 临时目录 --&gt; &lt;property name="maxUploadSize" value="10485760"/&gt; &lt;!-- 10M --&gt;&lt;/...

Spring MVC 前端控制器 (DispatcherServlet)处理流程

DispatcherServletDispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自己定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。 DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的...

springboot上传文件限制文件类型(springboot限制文件上传大小)

SpringBoot文件上传的使用以及原理1、所以,springboot以org.springframework.boot.loader.JarLauncher为启动类,又自定义了LaunchedURLClassLoader用来加载BOOT-INF中的class文件以及BOOT-INF/lib中的嵌套jar包。2、使用docker安装说明:9020为控制台访问端口。创建存储桶:设置存储桶权限:MinioProperties.java...

JavaWeb SpringMVC项目使用xml配置方式发布,打开浏览器访问变成文件目录...

Tomcat中conf\Catalina\localhost目录下,发布的配置文件改成: docBase="D:\workspaces\workspaces\web\WebRoot" 试试。

spring上传下载文件实现 springmvc实现文件上传 springmvc文件上传下载 springmvc文件上传文章 springmvc上传多个文件 springmvc上传大文件 springmvc异步上传文件 springmvc上传文件过程 springmvc文件上传功能
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
龙骨仙人掌怎么养 光芒四射意思 怎么用衍射解释夜晚看灯的放射光芒? 光芒的意思是什么 谁能告诉我搭配光芒的词是“散发”是对的还是“放射”是对的 树根下的土可以用了种茉莉花吗 有人能给我说说魔兽世界练哪个职业PK好 魔兽世界,什么职业哪个专精最适合PK了?再详细介绍一下,谢谢了~_百度... 魔兽世界 PK最牛的是什么职业? 想练个魔兽世界人物,喜欢pk,到底是练战士好还是法师好,帮我做个决定... 食品召回管理规定中,如何进行食品安全危害调查和评估以确定不安全食品... 风险分析食品安全中的风险分析 哪个牌子的电动车质量好些 线粒体是什么意思? 线粒体病患者的注意事项有哪些? 怎么理解法国大革命就是长期思想解放的产物 ...不要很长的!100字就够了!拜托哥哥姐姐们了啊!我爱你们啊~~亲一... 重庆必吃的十大小吃?(重庆好吃街哪些值得吃?) 影锋巫妖王之怒 重庆十大名小吃排行榜_重庆特色小吃排名前十名 重庆小吃排名前十名_重庆特色美食小吃有哪些 东莞有哪些正规的夜校 如何看待设计师面试让你上机做东西这件事? 东莞哪个培训机构好 东莞有哪些教育机构 02年世界杯巴西国家队名单 springbean实例化过程? 车载硬盘录像机能24小时录像吗 我装了车载4路硬盘录像机 H.264 车上没办法回放 取出SD卡在电脑里显示... 用springboot做一个网站(如何用springboot搭建一个web工程) Spring MVC 采用 MultipartFile 上传文件,文件名中存在中文乱码_百度... spring源码面试题(面试spring源码看过吗怎么回答) springboot操作阿里云oss如何实现文件上传? springmvc使用plupload时,上传界面延时出现 SpringBoot中静态资源文件的配置处理方式 公司起名大全2023最新版的免费 好听高雅又聚财的公司名字 InDesigncs4点击文字工具打字,为什么打出来的字上下都有点状的... 2023新开公司取什么名字好 吉利聚财的公司名字 公司取名三个字推荐,2023最新款企业起名3个字 公司起名金字开头聚财旺运的公司名字 三星s3可以充三星s4手机电吗? “各国(指26国)保证已全部的军事和经济资源,团结一致,彻底打败法西斯轴心... 三星S3的充电器充三星S4对手机会不会有损伤? 女人梦见灶意思,女人梦见灶里烧火火灭了 三星S4的充电器可以充三星S3吗 “在德国投降、欧洲战争结束后二至三个月内,苏俄(联)依据以下条件协助同 ... 三星galaxy s53.0充电控,能不能用s4的充电线充,我已经插进去了,显示... 三星s4用s3的数据线充电好吗 长跑方法和注意事项有哪些呢? 跑步虽好但必须注意哪些事呢?