繁体   English   中英

将用户重定向到另一个页面后开始文件下载(NodeJS / Express)

[英]Start a file download after redirecting a user to another page (NodeJS / Express)

背景资料

  • 我正在开发带有 Express 项目的 NodeJS。
  • 有一些公开可见的按钮应该允许文件下载,并且这些按钮具有受保护的路由,如果用户未登录,这些路由会将用户重定向到登录页面。
  • 我在 cookie 中存储了一些与文件下载相关的信息,这正在起作用。 本质上它是need_to_download_file2 == true

问题

一旦用户通过身份验证,我想将他们重定向到主页,然后开始为他们最初单击的文件下载文件。 截至目前,一切正常,但重定向后文件下载未开始,用户必须再次单击下载以启动它。

主要方法:

  • 我试图在 index.html 页面的onLoad()事件中调用window.open('/download/file2') 但是,网络选项卡将请求显示为已取消。 这就是onLoad()事件中包含的全部内容。
// onLoad
function hidePreloader () {
  document.getElementById('preloader').style.display = 'none'
  document.getElementById('contentDiv').style.display = 'block'

  window.open('localhost:3000/download/file2','_self');
}

我真的很感激任何帮助,如果需要可以提供更多信息!

提前致谢。

如果我没记错的话,所有客户端上传的文件都必须由用户自己选择。 不允许服务器指定要自己上传的文件(安全问题,因为服务器可能会随机定位您硬盘上的任何文件)。 相反,用户必须手动选择要上传的文件。

您可以做的(为了更好的用户体验)是检查用户是否在客户端通过 Javascript 进行了身份验证。 如果没有,则使用 Ajax 登录(不更改/丢失当前页面)。 然后,在他们通过 Ajax 进行身份验证后,原始上传文件仍然在当前页面中指定,然后可以启动它,而无需用户再次选择文件。

当上传请求到达时,您的服务器仍将检查正确的身份验证,但如果用户遵循此路径,则他们应该已经进行了身份验证。

仅供参考,如果不是用户单击的直接结果, window.open()通常会被浏览器中的弹出窗口阻止程序功能阻止(即便如此,它有时仍然存在问题)。 不依赖弹出窗口会更可靠。 很多时候,您可以使用页面内置的弹出窗口来模拟相同的体验,而不是作为单独的窗口。

添加触发器并触发它,这将调用由按钮调用的相同方法。 在 JQuery 中很容易实现,但在纯 javascript 中如何在 JavaScript 中触发事件? 可能会帮助你。 在前端的 node.js/express 中,您可以通过 npm i jquery 安装 jqyery 模块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM