好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

springMVC实现文件上传和下载

本文实例为大家分享了springMVC实现文件上传和下载的具体代码,供大家参考,具体内容如下

1准备工作

web.xml文件导入DispatcherServlet,CharacterEncodingFilter

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

< 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 >

前端测试页面

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

< html >

   < head >

     < title >$Title$</ title >

   </ head >

   < body >

   <%--  必须将表单的method设置为POST--%>

   <%--  设置enctype属性为multipart/form-data,二进制传递数据--%>

   < form action = "${pageContext.request.contextPath}/upload2" enctype = "multipart/form-data" method = "post" >

     < input type = "file" name = "file" />

     < input type = "submit" value = "upload" >

   </ form >

   < br />

   < a href = "${pageContext.request.contextPath}/download" rel = "external nofollow" >点击下载</ a >

   </ body >

</ html >

spring配置文件applicationContext.xml

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

<? xml version = "1.0" encoding = "UTF8" ?>

< beans xmlns = "http://HdhCmsTestspringframework.org/schema/beans"

        xmlns:xsi = "http://HdhCmsTestw3.org/2001/XMLSchema-instance"

        xmlns:context = "http://HdhCmsTestspringframework.org/schema/context"

        xmlns:mvc = "http://HdhCmsTestspringframework.org/schema/mvc"

        xsi:schemaLocation="http://HdhCmsTestspringframework.org/schema/beans

        http://HdhCmsTestspringframework.org/schema/beans/spring-beans.xsd

        http://HdhCmsTestspringframework.org/schema/context

        https://HdhCmsTestspringframework.org/schema/context/spring-context.xsd

        http://HdhCmsTestspringframework.org/schema/mvc

        https://HdhCmsTestspringframework.org/schema/mvc/spring-mvc.xsd">

 

     <!-- 自动扫描指定的包,下面所有注解类交给IOC容器管理,根据自己的项目扫描包 -->

     < context:component-scan base-package = "com.zky.controller" />

     <!-- 注解驱动 -->

     < mvc:annotation-driven >

         < mvc:message-converters register-defaults = "true" >

             < bean class = "org.springframework.http.converter.StringHttpMessageConverter" >

                 < constructor-arg 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 >

     <!-- 静态资源过滤-->

     < mvc:default-servlet-handler />

     <!-- 视图解析器 -->

     < bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver"

           id = "internalResourceViewResolver" >

         <!-- 前缀 -->

         < property name = "prefix" value = "/WEB-INF/jsp/" />

         <!-- 后缀 -->

         < property name = "suffix" value = ".jsp" />

     </ bean >

 

     <!--文件上传配置-->

     < bean id = "multipartResolver"   class = "org.springframework.web.multipart测试数据mons.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 >

</ beans >

2.文件上传

controller

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

package com.zky.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测试数据mons.CommonsMultipartFile;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.*;

import java.net.URLEncoder;

 

@Controller

public 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" ;

     }

}

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

/*

      * 采用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" ;

     }

3.文件下载 

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

@RequestMapping (value= "/download" )

     public String downloads(HttpServletResponse response , HttpServletRequest request) throws Exception{

         //要下载的图片地址,改为自己图片路径,我是下载在我的项目里面的

         String  path = request.getServletContext().getRealPath( "/upload" );

         //文件名

         String  fileName = "新建文本文档.txt" ;

 

         //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 ;

     }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

原文链接:https://blog.csdn.net/qq_53578500/article/details/119484932

查看更多关于springMVC实现文件上传和下载的详细内容...

  阅读:16次