温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SpringMVC怎么实现文件的上传和下载

发布时间:2022-02-23 15:26:21 来源:亿速云 阅读:198 作者:小新 栏目:开发技术

这篇文章给大家分享的是有关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配置文件

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

3.web.xml配置

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://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.前端代码

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

2.后端代码

import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpSession; import java.io.File; import java.io.IOException; /**  * @author compass  * @version 1.0  * @date 2021-05-11 14:33  */ @Controller public class UploadIFileController {     // 处理单个文件上传     @PostMapping("/uploadFile1.mvc")      public ModelAndView uploadFile1(MultipartFile file, HttpSession session) throws IOException {         ModelAndView view = new ModelAndView();         // 得到文件名称         String filename=file.getOriginalFilename();         System.out.println("文件名称:"+filename);         if (!file.isEmpty()){             // 判断文件的后缀             if (filename.endsWith(".jpg")||filename.endsWith(".png")||filename.endsWith(".txt"));             //设置文件的保存路径             String savePath="C:\Users\14823\IdeaProjects\springMVC\fileupload\src\main\webapp\WEB-INF\file";             File srcFile = new File(savePath,filename);             // 执行文件保存操作             file.transferTo(srcFile);             view.setViewName("forward:/uploadSuccess.jsp");         }else {             view.setViewName("forward:/uploadFailed.jsp");         }         return view;     }     // 处理多文件上传     @PostMapping("/uploadFile2.mvc")     public ModelAndView uploadFile2(MultipartFile[] file,HttpSession session) throws IOException {         ModelAndView view = new ModelAndView();         //设置文件的保存路径         String savePath="C:\Users\14823\IdeaProjects\springMVC\fileupload\src\main\webapp\WEB-INF\file";         String[] filenames = new String[file.length];         // 只要上传过来的文件为空或者是不符合指定类型的都会上传失败         for (int i = 0; i <filenames.length ; i++) {             // 判断上传过来的文件是否为空             if (!file[i].isEmpty()){                String filename=file[i].getOriginalFilename();                // 判断文件类型                if (filename.endsWith(".txt")||filename.endsWith(".jpg")||filename.endsWith(".png")){                    // 创建一个文件对象                    File srcFile = new File(savePath, filename);                    // 执行保存文件操作                    file[i].transferTo(srcFile);                    view.setViewName("forward:/uploadSuccess.jsp");                }else {                    view.setViewName("forward:/uploadSuccess.jsp");                }             }else {                 view.setViewName("forward:/uploadFailed.jsp");             }         }         return view;     } }

2.文件下载

文件下分为两种情况:

  • 文件名称是纯英文字母的

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

1.前端代码

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

2.后端代码

/**  * @author compass  * @version 1.0  * @date 2021-05-11 15:23  */ @Controller public class DownloadController {     // 非中文名称文件下载     @GetMapping("/download1.mvc")     public ResponseEntity <byte[]> fileDownload1(String filename,HttpServletRequest request) throws IOException {         String path="C:\Users\14823\IdeaProjects\springMVC\fileupload\src\main\webapp\WEB-INF\file\";         File file = new File(path,filename);         HttpHeaders header = new HttpHeaders();         header.setContentDispositionFormData("attachment",filename);         header.setContentType(MediaType.APPLICATION_OCTET_STREAM);         ResponseEntity<byte[]> result = new ResponseEntity<>(FileUtils.readFileToByteArray(file), header, HttpStatus.OK);         return result;     }     // 中文名称文件下载     @GetMapping("/download2.mvc")     public ResponseEntity <byte[]> fileDownload2(String filename,HttpServletRequest request) throws IOException {         System.out.println(filename);         String path="C:\Users\14823\IdeaProjects\springMVC\fileupload\src\main\webapp\WEB-INF\file\";         filename = filename.replace("_", "%");         filename= URLDecoder.decode(filename,"UTF-8");         String downloadFile="";         if (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie")>0){             filename= URLEncoder.encode(filename,"UTF-8");             downloadFile=filename.replaceAll("+","%20");         }else {             downloadFile=new String(filename.getBytes("UTF-8"),"ISO-8859-1");         }         File file = new File(path,filename);         HttpHeaders header = new HttpHeaders();         header.setContentDispositionFormData("attachment",downloadFile);         header.setContentType(MediaType.APPLICATION_OCTET_STREAM);         ResponseEntity<byte[]> result = new ResponseEntity<>(FileUtils.readFileToByteArray(file), header, HttpStatus.OK);         return result;     } }

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI