grails - Grails下载zip文件(浏览器下载文件)

标签 grails download

我知道已经有一些关于此的问题,但这些解决方案均无效。

我试图单击一个div,jQuery依次向jQuery的contoller发出get请求,并最终下载静态文件(Zip)。使用chrome dev工具,我看到请求以有效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

我的 Controller 逻辑:
    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 
     }

我不确定为什么我的浏览器没有真正下载文件。我已经尝试了 Controller 逻辑的许多不同变体,但都具有相同的结果。

我尝试过的一些事情:
  • Content-Type为“application / octect-stream;”
  • response.outputStream << file.bytes
  • response.outputStream << file.newInputStream()
  • 我添加了内容长度的
  • 在流写入
  • 之后移动内容类型

    我正在使用Grails 2.0.4

    最佳答案

    Gregg的评论是正确的,但是有解决方法,这就是我的工作方式:

    捕获jQuery AJAX file download plugin(希望您正在使用jquery;))

    我看过alternative但没有尝试过

    这会基于动态构建表单并将其发布到 Controller 上而发出HTTP请求(而不是Ajax),同时仍然为您提供所追求的AJAX体验。如果这看起来有点笨拙,那是,但是这是我发现它起作用的唯一方法。上面的URL讨论了潜在的问题。
    在jQuery中调用插件,如下所示:

    $("#myDiv").click(function () {
       $.download('${createLink(controller: 'download', action: 'zipFile')}', 'fileName=' + $("#myTextBox").val()); 
    });
    

    您的 Controller 看上去很近,使用您已经尝试过的方法应该可以工作:
    response.setHeader("Content-Type", "application/zip") 
    response.setHeader("Content-disposition", "attachment;filename=${file.name}")
    response.outputStream << file.newInputStream()
    

    我已经使用了一段时间,没有任何问题(尚未)

    关于grails - Grails下载zip文件(浏览器下载文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11460228/

    相关文章:

    grails - Grails 中的 Controller

    grails - 在 Grails 应用程序的数据库中存储和使用应用程序配置设置?

    android - 在 Android 上提供直接下载链接

    php - 为什么这个 PHP 下载脚本只在 Android 上失败

    Javascript 命中一个 url 并导致出现一个打开/保存文件对话框(完全没有新窗口)

    c# - Visual Studio 模板

    grails - 如何呈现自定义错误消息?

    grails - Grails-从联接表中删除并删除hasMany对象

    oracle - Grails 2.4.5配置Oracle连接器

    Java:使用 BufferedInputStream、BufferedOutputStream 下载问题