Grails 文件下载
Posted
技术标签:
【中文标题】Grails 文件下载【英文标题】:Grails File Download 【发布时间】:2010-09-28 15:24:21 【问题描述】:我正在尝试创建一个允许用户上传他们喜欢的任何文件类型的网站。我已经很好地实现了这个功能,并且文件保存在服务器上。稍后他们可以下载文件以查看,但我无法让它工作。 我使用了我能掌握的任何示例,但它们都倾向于使用文本文件作为示例。我的问题是 pdf 和许多其他文件类型无法正确下载。他们似乎下载得很好,但没有一个文件可以成功打开。比较文件,似乎大部分文件内容是正确的,但某些部分不是。 这是我的常规代码:
def file = new File(params.fileDir)
response.setContentType("application/octet-stream")
response.setHeader("Content-disposition", "filename=$file.getName()")
response.outputStream << file.text
return
此代码保存在由下载链接调用的控制器中。 我尝试过使用不同的 contentTypes,但我不知道我可以将哪个用于任何类型 - 有吗?我尝试的任何方法都不能解决问题。
感谢您的帮助。
【问题讨论】:
【参考方案1】:问题是您使用“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
【讨论】:
非常感谢。我正在使用 .text 方法,但不知道它实际上在做什么 - 找不到任何文档:/ 您可以在 Groovy JDK 中找到文档(Groovy 对 Java SDK 的动态扩展的文档)。在这种情况下,调用的是 java.io.File.getText() 方法:groovy.codehaus.org/groovy-jdk/java/io/File.html#getText() 有人知道如何将许多文件放入响应中吗?有什么例子吗? 你能告诉我 params.fileDir 是什么吗?确切的价值?我正在尝试同样的事情,但我有一个字节数组、内容类型等存储在我需要放入下载文件的对象中。谢谢!以上是关于Grails 文件下载的主要内容,如果未能解决你的问题,请参考以下文章