下载SPA中的文件

Slj*_*jux 9 javascript single-page-application

如何在单页应用程序中设置文件下载,而不会触发重新加载?

我遇到过在服务器上生成PDF文件并需要提供给客户端进行下载的情况.将其作为application/octet-stream发送在SPA中没有任何用处,因为无法通过AJAX发送文件.

我想出的最好的方法是将生成的文件保存在服务器上的临时文件夹中,将文件的URL发送到客户端并进行操作window.open(url).问题是不同的浏览器以不同的方式打开文件.例如,Firefox默认情况下使用它们在同一个选项卡中打开PDF,从而PDF.js破坏整个SPA的想法.但做一个window.open(url, '_blank')经常触发弹出窗口拦截器等.其他文件类型可以导致上帝知道什么...

在SPA中下载文件是否有跨浏览器,安全,通用的方法?

War*_*lin 5

在 SPA 应用程序中,我不久前编写了该window.location.href = '...'方法,并且在大多数浏览器中都可以正常工作,但是正在下载的页面的 contentType 和 content-disposition 标头是最大的区别。如果浏览器可以将文件识别为要下载的类型,那么 SPA 很可能不会在重定向时中断。另外,请注意,像 Angular 这样的 SPA 框架有时允许在其标签上添加target='_new'和 ,而不会干扰路由等。target='_self'

  • 问题是,如果您执行 `window.location.href = 'GenerateFile'`,并且服务器端出现错误,则无法处理该错误且不会破坏 SPA。生成临时文件时,可以返回类似`{ success: true, filepath: '...' }`和`{ success: false, message: '...' }`之类的内容,并且可以正确处理。 (4认同)