我需要根据请求中发送的某些参数生成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)中,我尝试了多种下载文件的方法:
这三个文件均已成功下载文件,但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/