springmvc-文件上传下载

导入maven依赖

 1 <dependencies>
 2         <!--文件上传-->
 3         <dependency>
 4             <groupId>commons-fileupload</groupId>
 5             <artifactId>commons-fileupload</artifactId>
 6             <version>1.3.3</version>
 7         </dependency>
 8         <!--servlet-api 导入高版本-->
 9         <dependency>
10             <groupId>javax.servlet</groupId>
11             <artifactId>javax.servlet-api</artifactId>
12             <version>4.0.1</version>
13         </dependency>
14     </dependencies>

配置web.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
 5          version="4.0">
 6 
 7     <servlet>
 8         <servlet-name>DispatcherServlet</servlet-name>
 9         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
10         <init-param>
11             <param-name>contextConfigLocation</param-name>
12             <param-value>classpath:applicationContext.xml</param-value>
13         </init-param>
14         <load-on-startup>1</load-on-startup>
15     </servlet>
16 
17     <servlet-mapping>
18         <servlet-name>DispatcherServlet</servlet-name>
19         <url-pattern>/</url-pattern>
20     </servlet-mapping>
21 
22 
23     <!--防止中文乱码-->
24     <filter>
25         <filter-name>encoding</filter-name>
26         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
27         <init-param>
28             <param-name>encoding</param-name>
29             <param-value>UTF-8</param-value>
30         </init-param>
31     </filter>
32     <filter-mapping>
33         <filter-name>encoding</filter-name>
34         <url-pattern>/*</url-pattern>
35     </filter-mapping>
36 </web-app>

在src下的resources下建applicationContext.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:context="http://www.springframework.org/schema/context"
 5        xmlns:mvc="http://www.springframework.org/schema/mvc"
 6        xsi:schemaLocation="http://www.springframework.org/schema/beans
 7        http://www.springframework.org/schema/beans/spring-beans.xsd
 8        http://www.springframework.org/schema/context
 9        http://www.springframework.org/schema/context/spring-context.xsd
10        http://www.springframework.org/schema/mvc
11        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
12     <!--自动扫描包,下面注解类交给iod容器处理-->
13     <context:component-scan base-package="com.rzk.controller"/>
14     <!--静态资源过滤-->
15     <mvc:default-servlet-handler/>
16     <!--注解驱动-->
17     <mvc:annotation-driven/>
18     <!--JSON乱码问题配置-->
19     <mvc:annotation-driven>
20         <mvc:message-converters>
21             <bean class="org.springframework.http.converter.StringHttpMessageConverter">
22                 <constructor-arg value="UTF-8"/>
23             </bean>
24             <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
25                 <property name="objectMapper">
26                     <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
27                         <property name="failOnEmptyBeans" value="false"/>
28                     </bean>
29                 </property>
30             </bean>
31         </mvc:message-converters>
32     </mvc:annotation-driven>
33 
34 
35     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
36         <property name="prefix" value="/WEB-INF/jsp/"/>
37         <property name="suffix" value=".jsp"/>
38     </bean>
39 
40     <!--文件上传配置-->
41     <bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
42         <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
43         <property name="defaultEncoding" value="utf-8"/>
44         <!-- 上传文件大小上限,单位为字节(10485760=10M) -->
45         <property name="maxUploadSize" value="10485760"/>
46         <property name="maxInMemorySize" value="40960"/>
47     </bean>
48 
49 </beans>

新建上传页面

1   <form action="${pageContext.request.contextPath}/file/upload" method="post" enctype="multipart/form-data">
2       <input type="file" name="file">
3     <input type="submit" value="upload">
4   </form>

controller

 1 @Controller
 2 @RequestMapping("/file")
 3 public class FileController {
 4     //@RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象
 5     //批量上传CommonsMultipartFile则为数组即可
 6     @RequestMapping("/upload")
 7     public String fileUpload(@RequestParam("file") CommonsMultipartFile file , HttpServletRequest request) throws IOException {
 8 
 9         //获取文件名 : file.getOriginalFilename();
10         String uploadFileName = file.getOriginalFilename();
11 
12         //如果文件名为空,直接回到首页!
13         if ("".equals(uploadFileName)){
14             return "redirect:/index.jsp";
15         }
16         System.out.println("上传文件名 : "+uploadFileName);
17 
18         //上传路径保存设置
19         String path = request.getServletContext().getRealPath("/upload");
20         //如果路径不存在,创建一个
21         File realPath = new File(path);
22         if (!realPath.exists()){
23             realPath.mkdir();
24         }
25         System.out.println("上传文件保存地址:"+realPath);
26 
27         InputStream is = file.getInputStream(); //文件输入流
28         OutputStream os = new FileOutputStream(new File(realPath,uploadFileName)); //文件输出流
29 
30         //读取写出
31         int len=0;
32         byte[] buffer = new byte[1024];
33         while ((len=is.read(buffer))!=-1){
34             os.write(buffer,0,len);
35             os.flush();
36         }
37         os.close();
38         is.close();
39         return "redirect:/index.jsp";
40     }
41 }

controller第二种上传方式

 1    @RequestMapping("/upload2")
 2     public String  fileUpload2(@RequestParam("file") CommonsMultipartFile file, HttpServletRequest request) throws IOException {
 3 
 4         //上传路径保存设置
 5         String path = request.getServletContext().getRealPath("/upload");
 6         File realPath = new File(path);
 7         if (!realPath.exists()){
 8             realPath.mkdir();
 9         }
10         //上传文件地址
11         System.out.println("上传文件保存地址:"+realPath);
12 
13         //通过CommonsMultipartFile的方法直接写文件(注意这个时候)
14         file.transferTo(new File(realPath +"/"+ file.getOriginalFilename()));
15 
16         return "redirect:/index.jsp";
17     }

下载文件

 1     @RequestMapping(value="/download")
 2     public String downloads(HttpServletResponse response , HttpServletRequest request) throws Exception{
 3         //要下载的图片地址
 4         String  path = request.getServletContext().getRealPath("/upload");
 5         String  fileName = "1.jpg";
 6 
 7         //1、设置response 响应头
 8         response.reset(); //设置页面不缓存,清空buffer
 9         response.setCharacterEncoding("UTF-8"); //字符编码
10         response.setContentType("multipart/form-data"); //二进制传输数据
11         //设置响应头
12         response.setHeader("Content-Disposition",
13                 "attachment;fileName="+ URLEncoder.encode(fileName, "UTF-8"));
14 
15         File file = new File(path,fileName);
16         //2、 读取文件--输入流
17         InputStream input=new FileInputStream(file);
18         //3、 写出文件--输出流
19         OutputStream out = response.getOutputStream();
20 
21         byte[] buff =new byte[1024];
22         int index=0;
23         //4、执行 写出操作
24         while((index= input.read(buff))!= -1){
25             out.write(buff, 0, index);
26             out.flush();
27         }
28         out.close();
29         input.close();
30         return "ok";
31     }

链接

 1 <a href="/file/download">下载</a> 

下载图片只需要改一下第5行代码就可以了

原文地址:https://www.cnblogs.com/rzkwz/p/12820112.html