这篇文章给大家分享的是有关SpringMVC怎么实现文件的上传和下载的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

具体内容如下

0.环境准备

1.maven依赖

<dependencies><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.7.0</version><scope>test</scope></dependency><!--servlet依赖--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!--springMVC依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.6.RELEASE</version></dependency><!--文件上传的jar包--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.8.0</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version></dependency>

2.springConfig。xml配置文件

<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttps://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--开启组件扫描--><context:component-scanbase-package="com.compass.file"></context:component-scan><!--声明配置springMVC视图解析器--><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--前缀:视图文件的路径--><propertyname="prefix"value="/WEB-INF/view/"/><!--后缀:视图文件的扩展名--><propertyname="suffix"value=".jsp"/></bean><!--读写JSON的支持(Jackson)--><mvc:annotation-driven/><!--配置多媒体解析--><beanid="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!--配置字符编码集--><propertyname="defaultEncoding"value="utf-8"></property><!--配置文件上传大小单位是字节-1代表没有限制maxUploadSizePerFile是限制每个上传文件的大小,而maxUploadSize是限制总的上传文件大小--><propertyname="maxUploadSizePerFile"value="-1"></property><!--,不设置默认不限制总的上传文件大小,这里设置总的上传文件大小不超过1M(1*1024*1024)--><propertyname="maxUploadSize"value="1048576"/></bean></beans>

3.web.xml配置

<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--声明springMvc的核心对象DispatcherServlet--><servlet><servlet-name>web</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springConfig.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>web</servlet-name><url-pattern>*.mvc</url-pattern></servlet-mapping><!--注册字符集过滤器,解决post请求的中文乱码问题--><filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param><init-param><param-name>forRequestEncoding</param-name><param-value>true</param-value></init-param><init-param><param-name>forResponseEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>1.文件上传

文件上传分为三种方式:

单个文件单字段

多个文件单字段

多个文件多字段

注意点:

1、提交方式为表单的post请求
2、from属性中必须有enctype=“multipart/form-data”
3、如果是单字段多文件:输入框中的属性必须为:multiple=“multiple”
4、表单中的属性name必须和后端参数一致

1.前端代码

<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>文件上传</title></head><body><div><p>文件上传(单个文件单字段上传)</p><formaction="${pageContext.request.contextPath}/uploadFile1.mvc"method="post"enctype="multipart/form-data"><inputtype="file"name="file"><inputtype="submit"value="提交"></form></div><div><p>文件上传(多文件单字段上传)</p><formaction="${pageContext.request.contextPath}/uploadFile2.mvc"method="post"enctype="multipart/form-data"><inputtype="file"name="file"multiple="multiple"><inputtype="submit"value="提交"></form></div><div><p>文件上传(多文件多字段上传)</p><formaction="${pageContext.request.contextPath}/uploadFile2.mvc"method="post"enctype="multipart/form-data"><inputtype="file"name="file"><inputtype="file"name="file"><inputtype="submit"value="提交"></form></div></body></html>

2.后端代码

importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.multipart.MultipartFile;importorg.springframework.web.servlet.ModelAndView;importjavax.servlet.http.HttpSession;importjava.io.File;importjava.io.IOException;/***@authorcompass*@version1.0*@date2021-05-1114:33*/@ControllerpublicclassUploadIFileController{//处理单个文件上传@PostMapping("/uploadFile1.mvc")publicModelAndViewuploadFile1(MultipartFilefile,HttpSessionsession)throwsIOException{ModelAndViewview=newModelAndView();//得到文件名称Stringfilename=file.getOriginalFilename();System.out.println("文件名称:"+filename);if(!file.isEmpty()){//判断文件的后缀if(filename.endsWith(".jpg")||filename.endsWith(".png")||filename.endsWith(".txt"));//设置文件的保存路径StringsavePath="C:\Users\14823\IdeaProjects\springMVC\fileupload\src\main\webapp\WEB-INF\file";FilesrcFile=newFile(savePath,filename);//执行文件保存操作file.transferTo(srcFile);view.setViewName("forward:/uploadSuccess.jsp");}else{view.setViewName("forward:/uploadFailed.jsp");}returnview;}//处理多文件上传@PostMapping("/uploadFile2.mvc")publicModelAndViewuploadFile2(MultipartFile[]file,HttpSessionsession)throwsIOException{ModelAndViewview=newModelAndView();//设置文件的保存路径StringsavePath="C:\Users\14823\IdeaProjects\springMVC\fileupload\src\main\webapp\WEB-INF\file";String[]filenames=newString[file.length];//只要上传过来的文件为空或者是不符合指定类型的都会上传失败for(inti=0;i<filenames.length;i++){//判断上传过来的文件是否为空if(!file[i].isEmpty()){Stringfilename=file[i].getOriginalFilename();//判断文件类型if(filename.endsWith(".txt")||filename.endsWith(".jpg")||filename.endsWith(".png")){//创建一个文件对象FilesrcFile=newFile(savePath,filename);//执行保存文件操作file[i].transferTo(srcFile);view.setViewName("forward:/uploadSuccess.jsp");}else{view.setViewName("forward:/uploadSuccess.jsp");}}else{view.setViewName("forward:/uploadFailed.jsp");}}returnview;}}2.文件下载

文件下分为两种情况:

文件名称是纯英文字母的

文件名带有中文不处理会乱码的

1.前端代码

<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>文件下载</title></head><body><h2><ahref="${pageContext.request.contextPath}/download1.mvc?filename=preview.jpg"rel="externalnofollow">文件下载(非中文名称)</a></h2><h2><ahref="${pageContext.request.contextPath}/download2.mvc?filename=文件下载.txt"rel="externalnofollow">文件下载(中文名称)</a></h2></body></html>

2.后端代码

/***@authorcompass*@version1.0*@date2021-05-1115:23*/@ControllerpublicclassDownloadController{//非中文名称文件下载@GetMapping("/download1.mvc")publicResponseEntity<byte[]>fileDownload1(Stringfilename,HttpServletRequestrequest)throwsIOException{Stringpath="C:\Users\14823\IdeaProjects\springMVC\fileupload\src\main\webapp\WEB-INF\file\";Filefile=newFile(path,filename);HttpHeadersheader=newHttpHeaders();header.setContentDispositionFormData("attachment",filename);header.setContentType(MediaType.APPLICATION_OCTET_STREAM);ResponseEntity<byte[]>result=newResponseEntity<>(FileUtils.readFileToByteArray(file),header,HttpStatus.OK);returnresult;}//中文名称文件下载@GetMapping("/download2.mvc")publicResponseEntity<byte[]>fileDownload2(Stringfilename,HttpServletRequestrequest)throwsIOException{System.out.println(filename);Stringpath="C:\Users\14823\IdeaProjects\springMVC\fileupload\src\main\webapp\WEB-INF\file\";filename=filename.replace("_","%");filename=URLDecoder.decode(filename,"UTF-8");StringdownloadFile="";if(request.getHeader("USER-AGENT").toLowerCase().indexOf("msie")>0){filename=URLEncoder.encode(filename,"UTF-8");downloadFile=filename.replaceAll("+","%20");}else{downloadFile=newString(filename.getBytes("UTF-8"),"ISO-8859-1");}Filefile=newFile(path,filename);HttpHeadersheader=newHttpHeaders();header.setContentDispositionFormData("attachment",downloadFile);header.setContentType(MediaType.APPLICATION_OCTET_STREAM);ResponseEntity<byte[]>result=newResponseEntity<>(FileUtils.readFileToByteArray(file),header,HttpStatus.OK);returnresult;}}

感谢各位的阅读!关于“SpringMVC怎么实现文件的上传和下载”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!