ssh框架之springmvc文件下载功能代码

一、前言 
  上一篇文章我们了解了,通过Java的io输出流来实现普通的文件下载的功能,是广大程序员在做项目中会普遍使用到的下载文件的方法。但是,在项目中我们都基本上是用框架在开发,所以,我们同时也需要学习每个框架的针对性的文件下载方法,这对于使用框架开发来说,不失为更加有效的一种方法,毕竟使用框架封装好的方法有时会更加节省时间。 
  那么,本篇博客则会将重点放在springmvc框架的文件下载功能方面,话不多说,切入主题:

二、实例

  1.一般需要配置的jar包: 
   commons.fileupload-1.2.1.jar和commons.io-1.4.0.jar,点击下载jar包

   2.xml配置:

   <!-- 转换json格式,使用ResponseBody注解 -->  
   <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
       <property name="messageConverters">  
           <list>  
                <!--此bean配置需放在mapping的配置之前,用于处理文件下载的responseEntity的返回值-->  
                <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>  
               <ref bean="mappingJackson2HttpMessageConverter" />  
           </list>  
       </property>  
   </bean>  
   <bean id="mappingJackson2HttpMessageConverter"   
        class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">  
       <property name="supportedMediaTypes">  
           <list>  
            <value>application/json;charset=UTF-8</value>  
               <value>text/html;charset=UTF-8</value>  
               <value>text/json;charset=UTF-8</value>      
           </list>  
       </property>  
   </bean>  
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

  3.方法实例:

  //文件下载,使用spring特有的responseEntity<byte[]>工具下载文件  
  //使用ResponseEntity<byte[]>返回值,同时设置HttpHeaders返回类型,则前台就会自动弹出下载框  
  @RequestMapping("/downloadFile")   
  public ResponseEntity<byte[]> downloadFile(String fileName,HttpServletRequest request) throws IOException{  

    //获取文件的根路径  
    String realPath = request.getSession().getServletContext().getRealPath("/upload");  

    //打印测试前台传递的文件名(包含文件格式,例如"test.jpg"),springmvc设置自动匹配  
    System.out.println("文件开始下载!获取到的文件名:"+fileName);  

    //根据文件名获取文件具体路径,创建文件  
    File file = new File(realPath+File.separator+fileName);    

    //将文件输入流  
    InputStream is = new FileInputStream(file);  
    byte[] buff = null;  
    buff = new byte[is.available()];  //获取文件的实际可读字节数,即获取文件总大小  
    is.read(buff);  //读取文件,使用byte字节数组存储  

    //设置返回类型和下载名称,设置之后前台会自动弹窗下载  
    HttpHeaders headers = new HttpHeaders();  
    headers.add("Content-Disposition", "attchement;filename=" + file.getName());  
    HttpStatus statusCode = HttpStatus.OK;  
    ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(buff, headers, statusCode); 

    return entity;         
  } 
 
 
  • 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

三、总结

  1.文件下载的方法思路基本都是:获取前台传递的文件名》获取文件的根路径》拼接完整路径》创建具体 文件》使用输入流读取文件》设置返回值为下载类型》使用输出流将文件输出到客户端,而其中实现这些步骤的方法 程序员可自行去编写和设定,不过基本都是大同小异,而框架也基本是封装了这些方法,让程序员节省更多的步骤和 时间成本,了解其中的原理之后程序员在面对各个框架的时候都基本上能够得心应手;

  2.springmvc在处理文件下载方面,使用了ResponseEntity这个返回类型来处理文件写入客户端的功能,在使用之前记得去配置相应的xml,以免出错;

  3.实践是检验认识真理性的唯一标准,根据代码和注释多进行尝试,则很快就会明白其中的原理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值