在SPA中下载文件
如何在单页面应用程序中设置文件下载,而不触发重新加载?
我遇到了在服务器上生成PDF文件并需要下载到客户端的情况。 将它作为应用程序/八位字节流发送在SPA中没有任何用处,因为无法通过AJAX发送文件。
最好的办法是将生成的文件保存在服务器上的临时文件夹中,将文件的URL发送到客户端并执行window.open(url)
。 问题是不同的浏览器以不同的方式打开文件。 例如,默认情况下,Firefox使用PDF.js
打开相同选项卡中的PDF,从而破坏了整个SPA理念。 但是做一个window.open(url, '_blank')
通常会触发弹出窗口阻止程序等。其他文件类型可能会导致上帝知道什么...
在SPA中下载文件是否存在跨浏览器,安全且通用的方法?
在SPA应用程序中,我写了一段时间后, window.location.href = '...'
完成了大部分浏览器的工作并正常工作,但正在下载的页面的contentType和content-disposition标题是最大的区别。 如果浏览器能够将文件识别为某种类型,那么SPA很可能不会在重定向时中断。 另外,像Angular这样的简单说明SPA框架有时会允许在标签上使用target='_new'
和target='_self'
而不会干扰路由等。