2016-06-09 95 views
0

我們正在嘗試我們的項目之一,並試圖下載一個PDF文檔。春天mvc +安全Pdf顯示空白

以下是我們在控制器

@RequestMapping(value = "/usermanual", method = RequestMethod.GET) 
public void getFile(HttpServletRequest req, 

    HttpServletResponse response) throws IOException 
    { 


    try { 
     // get your file as InputStream 
     File file = new File(req.getRealPath("/")+"js/loginPage/usermanual.pdf"); 
     InputStream is = new FileInputStream(file); 

     /*BufferedOutputStream stream = 
       new BufferedOutputStream(new FileOutputStream(new File("E:/Backups/p.pdf"))); 
     org.apache.commons.io.IOUtils.copy(is, stream); 

     stream.close();*/ 
     // Response header 
     response.setHeader("Content-Disposition", "attachment; filename=123.pdf"); 
     // copy it to response's OutputStream 
     org.apache.commons.io.IOUtils.copy(is, response.getOutputStream()); 
     response.setContentType("application/pdf"); 
     response.flushBuffer(); 
     response.getOutputStream().close(); 
    } catch (IOException ex) { 

     throw new RuntimeException("IOError writing file to output stream"); 
    } 

} 

該文件在電子商務目錄所做的這樣的文件複製在本地磁盤上沒有發出代碼,但在response.getOutputStream它也有一些問題。

我們得到空白pdf作爲結果。

請在這種情況下提供一些指導。先謝謝你。

+0

這是因爲InputStream中由第一副本消耗,你需要爲第二個副本打開一個新的InputStream。 – holmis83

+0

我評論過它,但它仍然顯示空白pdf。 –

回答

1

OutputStreamclose之前加上flush

response.getOutputStream().flush(); 

,或者如果你正在使用Spring MVC 4.2,你可以使用StreamingResponseBody

public StreamingResponseBody stream(HttpServletRequest req) 
     throws FileNotFoundException { 
    File file = new File(req.getRealPath("/")+"js/loginPage/usermanual.pdf"); 
    InputStream is = new FileInputStream(file); 
    return (os) -> { 
     IOUtils.copy(is, os); 
    }; 
} 

欲瞭解更多信息,請參閱本post