2008-12-28 130 views
21

我試圖craete一個網站,允許用戶上傳任何他們喜歡的文件類型。我已經實現了這個功能,文件保存在服務器上。稍後,他們可以下載文件以查看,但我無法使其正常工作。

我已經使用了任何我可以掌握的例子,但它們都傾向於使用文本文件作爲示例。我的問題是,pdf和許多其他文件類型沒有正確下載。他們似乎下載正常,但沒有任何文件將成功打開。比較文件,似乎大部分文件內容是正確的,但某些部分不是。

這裏是我的Groovy代碼:Grails文件下載

def file = new File(params.fileDir)  
response.setContentType("application/octet-stream") 
response.setHeader("Content-disposition", "filename=${file.getName()}") 
response.outputStream << file.text 
return 

此代碼舉行了其通過下載鏈接被稱爲控制器內。 我試過玩過不同的contentTypes,但我不知道我可以使用哪種類型 - 有沒有一種?我嘗試的任何東西都不能解決問題。

感謝您的幫助。

回答

41

問題是您使用「file.text」將文件的內容讀入字符串。即使內容是二進制文件,而不是文本文件(例如,PDF文件是二進制文件)並使用響應編碼發送到客戶端,從而修改了二進制內容,文件內容也會通過系統字符編碼進行轉換。你應該使用不同的方法,如下所示:

def file = new File(params.fileDir)  
response.setContentType("application/octet-stream") 
response.setHeader("Content-disposition", "attachment;filename=${file.getName()}") 

response.outputStream << file.newInputStream() // Performing a binary stream copy 
+0

不錯,謝謝。我正在使用.text方法,但不知道它實際上在做什麼 - 找不到任何文檔:/ – 2008-12-29 09:25:31