天天看點

下載下傳檔案模闆

從JAR中讀取檔案,不能使用resource.getFile() 方法,使用resource.getInputStream()

注意如果在JAR中使用resource.getFile(),會報錯。因為當 resource.getFile()方法,Spring是通路一個檔案系統路徑,但是它不能通路JAR中的路徑。可以通過resource.getInputStream()方式來進行擷取檔案資料。

例如:

@GetMapping("/download")
    @ApiOperation("下載下傳模闆檔案")
    public void download(HttpServletResponse res) {
        res.setCharacterEncoding("UTF-8");
        res.setHeader("content-type", "application/octet-stream;charset=UTF-8");
        res.setContentType("application/octet-stream;charset=UTF-8");
        try {
            ResourceLoader resourceLoader = new DefaultResourceLoader();
            @Cleanup InputStream inputStream = resourceLoader.getResource("classpath:/templates/excel/ActivityTemplate.xlsx").getInputStream();
            res.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode("資料模闆", "UTF-8"));
            byte[] fileData = IOUtils.toByteArray(inputStream);
            res.getOutputStream().write(fileData);
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }