学习笔记,代码笔记,如有错误,请留言指正!
文件上传与下载
springMVC环境
导包(部分,springMVC的包省略)
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
-
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"> <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <filter> <filter-name>encoding</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> </filter> <filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
-
applicationContext.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 http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:component-scan base-package="com.nych.controller"/> <mvc:default-servlet-handler/> <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg name="defaultCharset" value="UTF-8"/> </bean> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"> <property name="failOnEmptyBeans" value="false"/> </bean> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" > <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <!--上传文件配置--> <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver"> <!-- 编码格式,默认ISO-8859-1 --> <property name="defaultEncoding" value="utf-8"/> <!-- 上传文件的大小限制,单位:字节(Byte) 1M = 1048576字节 --> <property name="maxUploadSize" value="10485760"/> <property name="maxInMemorySize" value="40960"/> </bean> </beans>
-
FileController
@RestController public class FileController { @RequestMapping("/upload") public String fileUpload(@RequestParam("file") CommonsMultipartFile file, HttpServletRequest request) throws IOException { //获取文件名 String uploadFileName = file.getOriginalFilename(); //如果文件名为空,直接返回首页 if(uploadFileName.equals("")){ 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 inputStream = file.getInputStream(); //文件输入 FileOutputStream outputStream = new FileOutputStream(new File(realPath, uploadFileName));//文件输出 int len = 0; byte[] buffer = new byte[1024]; while ((len = inputStream.read(buffer)) != -1){ outputStream.write(buffer,0,len); outputStream.flush(); } outputStream.close(); inputStream.close(); return "ok"; } @RequestMapping("/download") public String downloads(HttpServletResponse response, HttpServletRequest request) throws IOException { //要下载的图片地址 String path = request.getServletContext().getRealPath("/upload"); //要下载的文件名 String fileName = "1.png"; //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. 读取文件-输入流 FileInputStream inputStream = new FileInputStream(file); //3. 写出文件-输出流 ServletOutputStream outputStream = response.getOutputStream(); byte[] buffer = new byte[1024]; int index = 0; while ((index = inputStream.read(buffer)) != -1){ outputStream.write(buffer,0,index); outputStream.flush(); } outputStream.close(); inputStream.close(); return "success"; } }
-
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="确认上传"> </form> <a href="/download">下载</a> </body> </html>