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

标签 javascript node.js express download onload

背景资料

  • 我正在开发一个带有 Express 的 NodeJS 项目。
  • 应该有允许文件下载的公开可见按钮,并且这些按钮具有 protected 路由,如果用户未登录则将其重定向到登录页面。
  • 我正在将一些与文件下载相关的信息存储在 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() 通常会被浏览器中的弹出窗口阻止程序功能阻止(即便如此,它有时仍然会出现问题)。不依赖弹出窗口会更可靠。通常,您可以使用页面内置的弹出窗口来模拟相同的体验,而不是作为单独的窗口。

关于javascript - 将用户重定向到另一个页面后开始文件下载 (NodeJS/Express),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59378917/

相关文章:

javascript - Ant 设计错误 : "Form.create() getFieldDecorator is not a function"

javascript - jQuery 对象 - 值 = 值 + 数字 - 不起作用?

node.js - mongodb、express.js 应用部署最佳实践

node.js - ExpressJS & Websocket & session 共享

node.js - MEAN 应用程序中项目的单独页面

javascript - 减去功能时间

javascript - Wordpress 中的 Backbone.js 错误

node.js - AWS - nodejs SDK - CognitoIdentityServiceProvider.initiateAuth - CredentialsError : Missing credentials in config

javascript - 如何在异步函数中调用父类函数

node.js - 如何使用 Node.js 代码获取所有 mongoDB 集合名称?