zoukankan      html  css  js  c++  java
  • 基于Spring MVC的文件上传和下载功能的实现

      配置文件中配置扫描包,以便创建各个类的bean对象

        <context:component-scan base-package="com.neuedu.spring_mvc"></context:component-scan>

    一、文件的上传

      Spring MVC 上下文中默认没有为文件上传提供了直接的支持,因此默认情况下不能处理文件的上传工作

        如果想使用 Spring 的文件上传功能,需现在上下文中配置 CommonsMultipartResovler:

      1、加入jar包:
          commons-fileupload-1.3.1.jar
          commons-io-2.4.jar

        Maven项目通过在pom.xml文件中配置jar包依赖

     1     <dependency>
     2     <groupId>commons-fileupload</groupId>
     3     <artifactId>commons-fileupload</artifactId>
     4     <version>1.3.1</version>
     5   </dependency>
     6   <dependency>
     7     <groupId>commons-io</groupId>
     8     <artifactId>commons-io</artifactId>
     9     <version>2.4</version>
    10   </dependency>        

      2、在SpringMVC配置文件中配置CommonsMultipartResovler

    1   <!-- 配置CommonsMultipartResolver,必须配置id值为multipartResolver -->
    2   <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    3     <property name="defaultEncoding" value="utf-8"></property>
    4     <!-- 以字节为单位 -->
    5     <property name="maxUploadSize" value="1024000"></property>
    6   </bean>

      3、表单的设置

        POST请求,file类型,enctype="multipart/form-data"

    1   <form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data">
    2         文件:<input type="file" name="file"/>
    3         描述:<input type="text" name="desc"/>
    4         <input type="submit" value="上传"/>
    5     </form>

      4、上传的实现

     1 @Controller
     2 public class TestController {
     3     @RequestMapping(value="/upload",method=RequestMethod.POST)
     4     public String upload(@RequestParam(value="desc") String desc,
     5             @RequestParam(value="file") CommonsMultipartFile file,HttpServletRequest request) throws IOException{
     6         ServletContext context = request.getSession().getServletContext();
     7         //获取真实路径,使用tomcat插件,默认路径为webapp下
     8         String realPath = context.getRealPath("/upload");
     9         
    10         //判断upload文件夹是否存在
    11         File file1=new File(realPath);
    12         if(!file1.exists()){
    13             file1.mkdir();
    14         }
    15         
    16         //文件名添加uuid,防止重复
    17         String uuid=UUID.randomUUID().toString().replace("-", "");
    18         String fileName=uuid+"_"+file.getOriginalFilename();
    19         //获取输入流
    20         InputStream in=file.getInputStream();
    21         //获取输出流,指定输出路径及文件名
    22         FileOutputStream out=new FileOutputStream(new File(realPath+"\"+fileName));
    23         IOUtils.copy(in, out);
    24         out.close();
    25         in.close();
    26         return "success";
    27     }
    28 }

    二、文件的下载

      用ResponseEntity<byte[]> 返回值完成文件下载

     1 @Controller
     2 public class TestController {    
     3     @RequestMapping(value="/download")
     4     public ResponseEntity<byte[]> download(HttpSession session) throws IOException{
     5         byte[] body=null;
     6         ServletContext context = session.getServletContext();
     7         String fileName="d5b9b61dc7154f5c9df4c844348ef6df_fennu.jpg";
     8         
     9         //获取文件路径
    10         String filePath = context.getRealPath("/upload/"+fileName);
    11         //读取文件内容
    12         InputStream in=new FileInputStream(new File(filePath));
    13         //创建文件字节数组,数组长度为文件的总大小
    14         body=new byte[in.available()];
    15         //将文件内容保存到字节数组中
    16         in.read(body);
    17         
    18         //创建响应头信息的MultiValueMap
    19         MultiValueMap<String, String> headers=new HttpHeaders();
    20         //设置文件名重新编码,以gbk格式读取再编码为iso8859-1
    21         fileName=new String(fileName.getBytes("gbk"), "iso8859-1");
    22         //设置响应信息
    23         headers.add("Content-Disposition", "attachment;filename="+fileName);
    24         
    25         HttpStatus statusCode=HttpStatus.OK;
    26         ResponseEntity<byte[]> responseEntity=new ResponseEntity<byte[]>(body, headers, statusCode);
    27         in.close();
    28         return responseEntity;
    29     }
    30 }
  • 相关阅读:
    Encryption (hard) CodeForces
    cf 1163D Mysterious Code (字符串, dp)
    AC日记——大整数的因子 openjudge 1.6 13
    AC日记——计算2的N次方 openjudge 1.6 12
    Ac日记——大整数减法 openjudge 1.6 11
    AC日记——大整数加法 openjudge 1.6 10
    AC日记——组合数问题 落谷 P2822 noip2016day2T1
    AC日记——向量点积计算 openjudge 1.6 09
    AC日记——石头剪刀布 openjudge 1.6 08
    AC日记——有趣的跳跃 openjudge 1.6 07
  • 原文地址:https://www.cnblogs.com/java-zmj/p/8039029.html
Copyright © 2011-2022 走看看