2012-05-05 13 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'を追加する必要があります。

ヘッダーの形式は次のとおりです。 コンテンツの処理:添付ファイル。ファイル名= "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(); 

それが正常に動作しています。

関連する問題