我知道已经有几个关于这个的问题,但这些解决方案都没有奏效。
我试图单击一个 div,然后 jQueryget
向我的控制器发出请求,最后下载静态文件 (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
}
我不确定为什么我的浏览器实际上没有下载该文件。我尝试了很多不同的控制器逻辑变体,但结果都一样。
我尝试过的一些事情:
- 内容类型为 'application/octect-stream;'
response.outputStream << file.bytes
response.outputStream << file.newInputStream()
- 我添加了内容长度
- 在流写入后移动内容类型
我正在使用 Grails 2.0.4