grails - Chrome开发人员工具显示Grails应用程序中动态生成的文件的下载状态已取消

标签 grails download extjs4.1 google-chrome-devtools

我需要根据请求中发送的某些参数生成Excel文件。一切似乎都运行良好,但是如果我打开Chrome的开发工具,则会将下载标记为红色,并且“状态”列显示为“(已取消)”。我仍然可以很好地打开下载的文件。

我还使用内部网络记录了更多信息,但我不确定自己在寻找什么。

最终的日志消息显示:

[st=52] DOWNLOAD_ITEM_COMPLETING
                       --> bytes_so_far = "6656"
                       --> final_hash = "BLAHBLAHBLAH....."
[st=80]    DOWNLOAD_FILE_DETACHED
[st=80]    DOWNLOAD_FILE_CLOSED
[st=93]    DOWNLOAD_ITEM_FINISHED
                       --> auto_opened = "no"
[st=94] -DOWNLOAD_ITEM_ACTIVE

用于生成文件的Grails / apache poi代码相当简单:
def downloadFile() {
    def cellData = params.data

    response.setContentType("application/vnd.ms-excel")
    response.setHeader('Content-Disposition', 'attachment;filename=myfile.xls')
    response.setStatus(HttpServletResponse.SC_OK)

    Workbook wb = new HSSFWorkbook()
    Sheet sheet = wb.createSheet("My Sheet")
    Row row = sheet.createRow(0)
    row.createCell(0).setCellValue(cellData)

    ByteArrayOutputStream outByteStream = new ByteArrayOutputStream();
    wb.write(outByteStream);
    byte [] outArray = outByteStream.toByteArray();

    response.setContentLength(outArray.length);
    response.outputStream << outArray
}

最后,在我们的Javascript应用程序(我们正在使用ExtJS 4)中,我尝试了多种下载文件的方法:
  • 将隐藏的表单附加到文档中(操作=“downloadFile” Controller 方法)并调用form.submit()
  • 将隐藏的iframe附加到文档中(使用src =“downloadFile” Controller 方法)
  • 将Ajax.request与isUpload:true和form:hiddenFormElement
  • 一起使用

    这三个文件均已成功下载文件,但Chrome仍显示状态已取消。

    我在Chrome控制台中注意到此警告:
    Resource interpreted as Document but transferred with MIME type application/vnd.ms-excel
    

    谢谢!

    最佳答案

    添加这行

    render(text: outArray, contentType: "text/xls", encoding: "UTF-8")
    

    在这之后
    response.outputStream << outArray
    

    关于grails - Chrome开发人员工具显示Grails应用程序中动态生成的文件的下载状态已取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14675274/

    相关文章:

    java - 有没有办法编译隐藏源代码?

    Grails 自定义监听器,更新属性会生成其他事件吗?

    java - Android下载文件时出现"Unfortunately, ... has stopped"

    javascript - ExtJS 和 Google map - 从 ExtJS 4.1.1 升级到 4.2.0 后 LoadMask 未居中

    grails - Grails save()方法错误

    Grails getter 写入数据库?

    html - HTML5下载属性错误处理

    php:如何使用带有输出缓冲压缩的 readfile 正确地提供文件下载

    javascript - 如何避免对 Extjs 4 中的隐藏字段进行验证

    sorting - 带本地排序的缓冲存储(客户端)