SpringMVCファイルダウンロードを実現

2674 ワード

忘れました
シーケンス
プログラマーとして、自分を誇り、喜び、誇りに思うゴミコードを何気なく書いているかもしれません.そうだ!ごみコードです.引用符は必要ありません.このような状況は悲しくて、更に悲しいのはあなた自身がずっと自分のごみの場所を発見することができません!私たちが成長したいなら、プログラミングの道を歩きたいなら、最初の資本は:マスター、習慣、優雅な効率的な丈夫なコードを書くことを堅持することです.このプロセスは一触即発ではなく、日常の小さなことの中で、自分で書いた小さなコードの中で徐々に改善するしかありません.
本来の書き方
/** 
  * @Description      
  * @author zhangyd 
  * @date 2015 12 7    10:34:23 
  * @param response 
  * @param file 
  */ 
public static void downLoadFile(HttpServletResponse response, File file) { 
    if (file == null || !file.exists()) { 
        return; 
    } 
    OutputStream out = null; 
    try { 
        response.reset(); 
        response.setContentType("application/octet-stream; charset=utf-8");      
        response.setHeader("Content-Disposition", "attachment; filename=" + file.getName()); 
        out = response.getOutputStream(); 
        out.write(FileUtils.readFileToByteArray(file)); 
        out.flush(); 
    } catch (IOException e) { 
        e.printStackTrace(); 
    } finally { 
        if (out != null) { 
            try { 
                out.close(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
        } 
    } 
}

簡略化された書き方
/**
  * @Description     
  * @author zhangyd
  * @date 2015 12 11    6:11:33
  * @param fileName
  * @param file
  * @return
  * @throws IOException
  */ 
public ResponseEntity download(String fileName, File file) throws IOException { 
    String dfileName = new String(fileName.getBytes("gb2312"), "iso8859-1");  
    HttpHeaders headers = new HttpHeaders(); 
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); 
    headers.setContentDispositionFormData("attachment", dfileName); 
    return new ResponseEntity(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED); 
}

アプリケーションファイルに構成を追加します.これはresponseを構成する文字コードです.構成しないと、文字化けなどの問題が発生する可能性があります.
 
 
     
         
             
             
         
     
 
 
     
         
            text/plain;charset=UTF-8