我知道这里有几个关于这方面的问题,但这些解决方案都不起作用。Grails下载zip文件(浏览器下载文件)
我试图点击一个div,这反过来jQuery使get
请求我的控制器,并最终下载静态文件(Zip)。使用chrome开发工具,我看到请求会以有效的方式返回200.请求的响应似乎是chrome的尝试渲染,但我可以确定zip文件中包含的文件的名称,所以我可以告诉它发现一切正确。
的响应头:
Content-Type:application/zip
Content-disposition:attachment;filename=myFile.zip
Date:Thu, 12 Jul 2012 20:18:05 GMT
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
我的控制器逻辑:
def root = request.getSession().getServletContext().getRealPath("/")
def file = new File("C:\path\to\my\file")
if (file.exists()) {
def os = response.outputStream
response.setHeader("Content-Type", "application/zip")
response.setHeader("Content-disposition", "attachment;filename=${file.name}")
def bytes = file.text.bytes
for(b in bytes) {
os.write(b)
}
os.flush()
org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes().renderView = false
}
我不知道为什么我的浏览器是不实际下载文件。我已经尝试了很多不同的控制器逻辑变体,但都具有相同的结果。
有些事情我已经试过:
- 内容类型为“应用程序/八位字节流;”
response.outputStream << file.bytes
response.outputStream << file.newInputStream()
- 我添加的内容长度
- 流之后移动内容类型写入
我使用Grails 2.0.4
如果我正确理解你,你正试图从ajax请求下载文件。这并不真正起作用。 JavaScript并不是真正用于处理这种二进制数据的。是这样吗? – Gregg 2012-07-12 20:48:06
希望javascript不需要对二进制文件进行任何操作。JavaScript应该只是简单地提出一个Web请求 – OnResolve 2012-07-12 21:13:54
不,这不是它的工作原理。您无法通过Ajax请求下载文件。 – Gregg 2012-07-12 21:15:54