簡體   English   中英

無法在Spring MVC中下載文件

[英]Unable to download file in Spring MVC

請求映射到的我的控制器-

我將值從AJAX返回到控制器-


$.ajax({
        type: 'GET',
        dataType: 'json',
        contentType:"application/json",
        url:"/Putty/downloadProcess/?param="+param          
    });

@RequestMapping(value = "/downloadProcess", method = RequestMethod.GET)
    protected void download(@RequestParam("param") String value, HttpServletResponse response)
            throws ServletException, IOException {

        Properties prop = new Properties();
        InputStream input = new FileInputStream("config.properties");;
        prop.load(input);

        System.out.println(value);
        String path = prop.getProperty("path.MS1");
        String filepath= path.concat(value);
        System.out.println(filepath);

        File downloadFile = new File(filepath);
        FileInputStream inStream = new FileInputStream(downloadFile);


        String mimeType = "application/octet-stream";
        System.out.println("MIME type: " + mimeType);

        // modifies response
        response.setContentType(mimeType);
        response.setContentLength((int) downloadFile.length());

        // forces download
        String headerKey = "Content-Disposition";
        String headerValue = String.format("attachment; filename=\"%s\"", downloadFile);
        response.setHeader(headerKey, headerValue);

        System.out.println(response);
        // obtains response's output stream
        OutputStream outStream = response.getOutputStream();

        byte[] buffer = new byte[4096];
        int bytesRead = -1;

        while ((bytesRead = inStream.read(buffer)) != -1) {
            outStream.write(buffer, 0, bytesRead);
        }

        inStream.close();
        outStream.close();

這將在我的JSP上顯示文件名


<c:forEach var="listValue" items="${files}">
        <label onClick="download('${listValue}')">${listValue}</label>
        <br>
    </c:forEach>

問題是,我可以在控制台上看到MIME類型以及AJAX返回的值-文件名。 但是,當我單擊顯示在我的JSP上的文件名時,沒有得到“下載”對話框。 我沒有正確處理請求還是缺少其他內容?

謝謝!

試試吧

ServletOutputStream out = response.getOutputStream();
response.setContentType("application/octet-stream");

   if (file.isFile())
   {
        response.setHeader("Content-Disposition", "attachment;filename=\"" + downloadFile.getName() + "\"");
        try (FileInputStream inputStream = new FileInputStream(downloadFile ))
        {
            IOUtils.copy(inputStream, out);
        }
    }

默認情況下會出現“打開/保存”對話框,因此我們不能強制執行任何操作。 這是瀏覽器特定的設置,您不能在客戶端更改。

對於Mozilla Firefox示例: 使用Mozilla Firefox瀏覽器,您將獲得此彈出窗口

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM