2008-12-28 94 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