2012-05-05 41 views
0

我需要同時具有查看和下載.pdf文件以使用計算機功能。 我正在使用Spring MVC 3,並且查看就像將URL指向文件的位置一樣簡單。在java web應用程序中查看和下載pdf文件的區別

但我不知道如何使該文件可下載。我正在嘗試下面的代碼,但它似乎沒有返回,並且請求從未完成。

@RequestMapping(value = "files/{fileName}") 
public void downloadPDF(@PathVariable("fileName") String fileName, HttpServletRequest req, HttpServletResponse res) { 
    logger.debug("Http request URL is " + req.getRequestURL()); 
    res.setContentType("application/pdf"); 
    URL pdf = null; 
    try { 
     pdf = new URL(req.getRequestURL().toString()); 
     BufferedInputStream is = new BufferedInputStream(pdf.openStream()); 

     IOUtils.copy(is, res.getOutputStream()); 
     res.flushBuffer();  
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

有人能理解爲什麼會發生?

謝謝。

回答

4

如果您希望使文件可下載,則需要將頭「Content-Disposition」添加到響應中。

標題的格式是: 內容處置:附件; filename =「fname.ext」

嘗試類似。

res.addHeader("Content-Disposition", "attachment; filename=\"document.pdf\""); 
+0

同樣的結果。該請求只是沒有完成。我的代碼在下載文件方面出了什麼問題? – skip

+0

嘗試使用文件的長度設置內容長度標題。 – BeWarned

+0

找到該文件的代碼存在一些問題。謝謝 :) – skip

1

使用下面的代碼:

InputStream is = new FileInputStream(new File(..abcolute path...))); 

response.setHeader("Content-Disposition", "attachment;filename=\""+filename+".pdf"+"\""); 
IOUtils.copy(is, response.getOutputStream());  
       response.flushBuffer(); 

在我的應用程序它的正常工作。

相關問題