SpringMvc之java文件下載

首先強調,須要下載的文件只能放在項目中的webapp下java

 

一、頁面的一個超連接,連接到controllerweb

<a href="<%=path%>/download">點擊下載文件</a>

二、controller中的代碼:app

@RequestMapping("/download")
    @ResponseBody
        public void downLoadExcelModel(HttpServletRequest request,HttpServletResponse response) throws Exception {
         String download = request.getSession().getServletContext().getRealPath("/upload/"); //獲取下載路勁
         ExcelAndCsvDownload.downLoadFile(moban.csv,csv,download, response);//依次傳入須要下載的文件名,文件格式,路徑,response參數
       }

三、工具類:webapp

package com.common.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import javax.servlet.http.HttpServletResponse;
public class ExcelAndCsvDownload{
        public static boolean downLoadFile(String name,String type,String path,HttpServletResponse response)
            throws Exception {
            String fileName = name;
            String fileType = type;
            File file = new File(path+fileName);  //根據文件路徑得到File文件
            //設置文件類型(這樣設置就不止是下Excel文件了,一舉多得)
            if("pdf".equals(fileType)){
               response.setContentType("application/pdf;charset=GBK");
            }else if("csv".equals(fileType)){
               response.setContentType("application/msexcel;charset=GBK");
            }else if("doc".equals(fileType)){
               response.setContentType("application/msword;charset=GBK");
            }else if("xls".equals(fileType)){
                   response.setContentType("application/msexcel;charset=GBK");
                }
            //文件名
            response.setHeader("Content-Disposition", "attachment;filename=\""
                + new String(fileName.getBytes(), "ISO8859-1") + "\"");
            response.setContentLength((int) file.length());
            byte[] buffer = new byte[4096];// 緩衝區
            BufferedOutputStream output = null;
            BufferedInputStream input = null;
            try {
              output = new BufferedOutputStream(response.getOutputStream());
              input = new BufferedInputStream(new FileInputStream(file));
              int n = -1;
              //遍歷,開始下載
              while ((n = input.read(buffer, 0, 4096)) > -1) {
                 output.write(buffer, 0, n);
              }
              output.flush();   //不可少
              response.flushBuffer();//不可少
            } catch (Exception e) {
              //異常本身捕捉       
            } finally {
               //關閉流,不可少
               if (input != null)
                    input.close();
               if (output != null)
                    output.close();
            }
           return false;
        }
}
相關文章
相關標籤/搜索