我的应用程序从数据库提取中创建了服务器端的excel文件。
发布请求将参数发送到服务器,然后服务器使用该参数来查询数据库。
服务器使用这些参数提取数据,然后将数据转换为excel文件(xlsx),然后根据发送给服务器的参数使用特定的文件名保存文件。
服务器通过将文件名发送到浏览器来响应发布请求。
然后,浏览器使用文件名和其他预定义参数创建链接,以按照以下说明下载文件:
var link = 'http://host-name/path-to-file/excel-file.xlxs'; // the link that is created by the js in the browser
window.location = link; // the file is downloaded
这适用于chrome,firefox,opera和safari,在这些浏览器中,文件下载没有问题。
但是;在Microsoft-edge中运行时,未下载文件,该文件显示在页面中。
答案 0 :(得分:1)
某人在某些版本的IE中也遇到了类似的问题,必须设置Cache-Control标头才能使下载正常进行:
response.Cache.SetCacheability(HttpCacheability.Private);
答案 1 :(得分:0)
这里的问题是这种下载文件的方法实际上并未下载文件。我使用javascript
来指示browser
打开excel
文件window.location = link;
。它告诉browser
,转到该链接,然后打开在该地址找到的所有内容。通常是HTML
个文件或其他transpiled
到HTML
中的文件。在某些情况下,它也可以是.pdf
或现代web-browsers
能够解释和运行的文件。
现在,该方法主要起作用的原因是; chrome
和firefox
之类的浏览器足够聪明,知道它们无法解释和显示excel
文件,因此,他们下载了文件。很聪明的权利。然而; microsoft-edge
并不比其更成熟的同胞聪明。它会尝试解释并运行文件,当然不能。这会导致什么;是胡说八道;正如您从上述问题的屏幕抓取中看到的。
我的问题实际上是技术不匹配的更深层次问题。此后,我迁移到使用更现代的堆栈,用node.js
替换了普通的express
服务器。将front-end
从cross-origin
tomcat
的Java容器应用程序服务器模型中移出(自从我对javascript
进行编码以来,这每天都让我头疼) same-origin
和webpack
一起使用的express
环境。
您可能知道,使用webpack
给front-end
带来了一个全新的维度,这在我们对web-dev
使用“旧方法”之前是不可用的。
使用webpack
时,大多数改进来自其将'node.js'带到前端的能力。
这使我作为开发人员的生活变得轻松了150%,上面我的问题中所述的问题类型已经过去。 javascript
获胜!对我来说,这里的道理是,有时候这不是快速解决方案,您只需要正确地做些事情即可。