在控制器中,我这样做是为了尝试在用户单击链接时让浏览器下载文件:
render( contentType: 'text/csv', text: output);
Run Code Online (Sandbox Code Playgroud)
这在 Chrome 中有效,但在 IE 或 safari 中不起作用,它们只显示数据。此外,它还将文件名显示为数字(恰好是 url 上的 Id,例如 www.me.com/show/1
显然。修复下载的方法是转换为八位字节流。这可以在 htaccess 文件中完成,但我不使用 apache。在grails中有什么方法可以做到这一点吗?我想这是一个常见的场景。
在 php 中,人们可能会这样做:
header('Content-Disposition: attachment; filename="downloaded.csv"');
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
阅读下面的两个回复后(谢谢!),这有效:
response.setHeader "Content-disposition", "attachment; filename=report.csv"
response.contentType = 'text/csv'
response.outputStream << output
response.outputStream.flush()
Run Code Online (Sandbox Code Playgroud)
令人惊奇的是,我可以获取一个字符串并使用 << 将其写入输出流。我打算尝试找出如何将字符串变成流的形式。
class DownloadController {
def download(long id) {
Document documentInstance = Document.get(id)
if ( documentInstance == null) {
flash.message = "Document not found."
redirect (action:'list')
} else {
response.setContentType("APPLICATION/OCTET-STREAM")
response.setHeader("Content-Disposition", "Attachment;Filename=\"${documentInstance.filename}\"")
def outputStream = response.getOutputStream()
outputStream << documentInstance.filedata
outputStream.flush()
outputStream.close()
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4259 次 |
| 最近记录: |