spring 实现文件下载

作者: cat昵称居然被占用了 | 来源:发表于2016-12-02 20:20 被阅读184次

    实现方法如下:

    @RequestMapping(value = "/download/file/{method}",method = GET) 
     public ResponseEntity<byte[]> download(HttpServletRequest request,@PathVariable("method") String method) throws IOException {  
        HttpHeaders headers = new HttpHeaders();
        String fileName=request.getParameter("fileName"); 
        System.out.println(fileName);   
        List<Charset> list=new ArrayList<Charset>();    
        list.add(Charset.forName("UTF-8"));    
        headers.setAcceptCharset(list);    
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);    
        headers.setContentDispositionFormData("attachment", new String(fileName.getBytes("UTF-8"), "iso8859-1")); 
        File file=commandManager.getFile(folderStr+fileName);  
        if(file!=null){   
         return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),              headers, HttpStatus.CREATED);   
         }else{      
        downloadFileMessageWebSocketHandler.sendMessage("文件不存在,请刷新文件列表");   
         return null;   
         } 
     }
    

    downloadFileMessageWebSocketHandler是我自己写的消息推送类。

    实现方法就这么简单,但是有两点需要注意。

    • 下载下来的文件显示乱码问题

    对于这个问题,需要加上如下配置:
    <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>需要将这行配置加在json配置前面,如下:

        <mvc:annotation-driven>  
          <mvc:message-converters register-defaults="true">   
         <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>      
        <bean class="com.datatrees.loan.collection.converter.MappingJackson2JsonpHttpMessageConverter"              p:supportedMediaTypes="*/*" >        
        <property name="objectMapper">   
               <!--convert null to ""-->             
       <bean class="com.datatrees.loan.collection.global.ObjectMapping"/>            
        </property>      
        </bean>   
       </mvc:message-converters>
        </mvc:annotation-driven>
    
    • 下载下来的文件名无法显示中文的问题
      headers.setContentDispositionFormData("attachment", new String(fileName.getBytes("UTF-8"), "iso8859-1"));
      转码就可以了

    相关文章

      网友评论

        本文标题:spring 实现文件下载

        本文链接:https://www.haomeiwen.com/subject/vkuqmttx.html