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

问题描述 投票:1回答:2

背景信息

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

问题

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

主要方法:

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

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

我将非常感谢您的帮助,如果需要,可以提供更多信息!

提前感谢。

javascript node.js express download onload
2个回答
3
投票

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

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

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

FYI,window.open()通常被浏览器中的弹出窗口阻止程序功能阻止,如果这不是用户单击的直接结果(即使这样,有时还是有问题的)。不依靠弹出窗口会更可靠。通常,您可以通过页面内置的弹出窗口(而不是作为单独的窗口)来模拟相同的体验。


1
投票

添加触发器并触发它,它将调用相同的方法,该方法由button调用。在JQuery中实现起来很容易,但是用纯JavaScript How to trigger event in JavaScript?可能会帮到您。在node.js / express for frontend中,您可以通过npm i jquery安装jqyery模块。

© www.soinside.com 2019 - 2024. All rights reserved.