1. 程式人生 > >Java 下載 Excel模板時,報修正 Excel在“xxx.xlsx”中發現不可讀取的內容。是否恢復此工作薄的內容?如果信任此工作簿的來源,請點選"是"

Java 下載 Excel模板時,報修正 Excel在“xxx.xlsx”中發現不可讀取的內容。是否恢復此工作薄的內容?如果信任此工作簿的來源,請點選"是"

程式碼如下:

/**
     * 下載匯入應用模板
     *
     * @return
     */
    @ResponseBody
    @RequestMapping(method = RequestMethod.GET)
    public Response getApplicationTemplate(HttpServletRequest req, HttpServletResponse res) {
        try {
            //獲取要下載的模板名稱
            String fileName = "ApplicationImportTemplate.xlsx";
            //設定要下載的檔案的名稱
            res.setHeader("Content-disposition", "attachment;fileName=" + fileName);
            //通知客服檔案的MIME型別
            res.setContentType("application/vnd.ms-excel;charset=UTF-8");
            //獲取檔案的路徑
            String filePath = getClass().getResource("/template/" + fileName).getPath();
            FileInputStream input = new FileInputStream(filePath);
            OutputStream out = res.getOutputStream();
            byte[] b = new byte[2048];
            int len;
            while ((len = input.read(b)) != -1) {
                out.write(b, 0, len);
            }
            //修正 Excel在“xxx.xlsx”中發現不可讀取的內容。是否恢復此工作薄的內容?如果信任此工作簿的來源,請點選"是"
            res.setHeader("Content-Length", String.valueOf(input.getChannel().size()));
            input.close();
            return Response.ok("應用匯入模板下載完成");
        } catch (Exception ex) {
            log.error("getApplicationTemplate :", ex);
            return Response.ok("應用匯入模板下載失敗!");
        }
    }

需要下載檔案位置: 
這裡寫圖片描述

如果在HttpServletResponse Header中不指定Content-Length,那麼在下載完成開啟後,會有如下提示: 
這裡寫圖片描述

轉載於:https://blog.csdn.net/jiankunking/article/details/75213798