2013-02-19 40 views
0

碧玉文件,我有如下因素代碼:下載Grails的

response.contentType = "application/octet-stream" 
response.setContentLength(templateFile.bytes.length) 
response.setHeader("Content-disposition", "attachment;filename=${fileName}") 
IOUtils.copy(templateFile,response.outputStream) 

哪裏templateFile是碧玉報告模板(* JRXML)。 而且我總是得到net :: ERR_FILE_NOT_FOUND。 對於不同的文件類型,這段代碼工作正常。

另外我試着用內容類型'text/xml',但結果是一樣的。

回答

1

問題調用flush()上的OutputStream後解決。運算符< <在IOUtils.copy中隱含地執行此操作。

0

嘗試使用response.setContentLength()來設置數據的長度。此外,您可以調試以查看文件的字節是否在response.outputStream中。

下面是爲我工作的片段:

byte[] bytes = getBytesOfFile() 
response.setContentType("application/octet-stream") 
response.setContentLength(bytes.length) 
response.outputStream << bytes 
+0

ContentLength已設置且字節在outputStream中,但瀏覽器仍然收到ERR_FILE_NOT_FOUND錯誤。 – 2013-02-19 13:43:50

+0

嗯也許文件已損壞?你可以在系統中打開這個沒有錯誤嗎? – 2013-02-19 14:00:34

+0

文件有效。正如我所見 - GrailsDispatcherServlet對從控制器返回的ModelAndView執行「呈現」,並且outputStream變爲空。看起來我應該深入研究這種方法。 – 2013-02-19 14:46:40