下載文件(前端+后台)


1,頁面

<a href="javascript:void(0)" class="btn buttonBox btn-primary " onclick="downloadExampleDataTemplate()" style="background-color: #1ab394;border-color: #1ab394;height: 32px;">下載樣例模版</a>

2,js

//下載樣例模板
function downloadExampleDataTemplate() {
    var id = $("#id").val();
    window.location.href="downloadExampleDataTemplate?id="+id;
}

3,后台

/**
     * 下載文件
     * @param response
     * @param fileName 文件名稱
     * @author 
     * @date 2018/3/31
     */
    public static void downFile(HttpServletResponse response, String fileName, String templateUrl) {
        String filePath = templateUrl+fileName+".xls";

        //讀取要下載的文件,保存到文件輸入流
        try {
            // 設置頭部信息
            response.setHeader(
                    "Content-disposition",
                    "attachment;filename="
                            + URLEncoder.encode(fileName+".xls", "UTF-8"));
            FileInputStream in = new FileInputStream(filePath);
            //創建輸出流
            OutputStream out = response.getOutputStream();
            //創建緩沖區
            byte buffer[] = new byte[1024];
            int len = 0;
            //循環將輸入流中的內容讀取到緩沖區當中
            while((len=in.read(buffer))>0){
                //輸出緩沖區的內容到瀏覽器,實現文件下載
                out.write(buffer, 0, len);
            }
            //關閉文件輸入流
            in.close();
            //關閉輸出流
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

4,出現問題

(1)一開始用的ajax發送的請求

$.ajax({
                url:"downFile",
                type:'post',
                async:true,
                data:$("#queryCourseForm").serialize(),//攜帶查詢條件
                success:function () {
                   
                }
            });

但是響應頭正確,數據也正確的傳到后台,但是未下載文件

 

總結(參考:https://www.cnblogs.com/qlqwjy/p/8971207.html):

即使ajax請求到一個controller在跳轉到下載的controller上也不能下載,百度了一下總結下原因:發現原來jQuery的ajax回調已經把response的數據傻瓜式的以字符串的方式解析.

 5,解決辦法

參考:https://www.cnblogs.com/qlqwjy/p/8971207.html

  • 第一種:將傳條件的以表單提交的方式進行(推薦這種)-----這種方式也可以用來頁面跳轉
    $("#queryCourseForm").attr("action",contextPath+"/downCourses.do");//改變表單的提交地址為下載的地址
                $("#queryCourseForm").submit();//提交表單
  • 第二種:以window.location.href="xxx"的方式請求下載地址(我用的這一種)
    window.location.href=contextPath+"/downCourses.do"

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM