使用MS Edge下载Excel文件

时间:2018-07-02 11:45:38

标签: javascript excel download microsoft-edge

我的应用程序从数据库提取中创建了服务器端的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中运行时,未下载文件,该文件显示在页面中。

enter image description here

2 个答案:

答案 0 :(得分:1)

某人在某些版本的IE中也遇到了类似的问题,必须设置Cache-Control标头才能使下载正常进行:

response.Cache.SetCacheability(HttpCacheability.Private);

Source

答案 1 :(得分:0)

这里的问题是这种下载文件的方法实际上并未下载文件。我使用javascript来指示browser打开excel文件window.location = link;。它告诉browser,转到该链接,然后打开在该地址找到的所有内容。通常是HTML个文件或其他transpiledHTML中的文件。在某些情况下,它也可以是.pdf或现代web-browsers能够解释和运行的文件。

现在,该方法主要起作用的原因是; chromefirefox之类的浏览器足够聪明,知道它们无法解释和显示excel文件,因此,他们下载了文件。很聪明的权利。然而; microsoft-edge并不比其更成熟的同胞聪明。它会尝试解释并运行文件,当然不能。这会导致什么;是胡说八道;正如您从上述问题的屏幕抓取中看到的。

我的问题实际上是技术不匹配的更深层次问题。此后,我迁移到使用更现代的堆栈,用node.js替换了普通的express服务器。将front-endcross-origin tomcat的Java容器应用程序服务器模型中移出(自从我对javascript进行编码以来,这每天都让我头疼) same-originwebpack一起使用的express环境。

您可能知道,使用webpackfront-end带来了一个全新的维度,这在我们对web-dev使用“旧方法”之前是不可用的。

使用webpack时,大多数改进来自其将'node.js'带到前端的能力。

这使我作为开发人员的生活变得轻松了150%,上面我的问题中所述的问题类型已经过去。 javascript获胜!对我来说,这里的道理是,有时候这不是快速解决方案,您只需要正确地做些事情即可。