将用户重定向到另一个页面后开始文件下载(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');
}
非常感谢任何帮助,如果需要可以提供更多信息!
提前致谢。
如果我没记错的话,所有客户端上传的文件都是用户自己挑选的。不允许服务器指定要自行上传的文件(安全问题,因为服务器可以随机定位您硬盘上的任何文件)。相反,用户必须手动 select 上传文件。
您可以做的(为了更好的用户体验)是检查用户是否在客户端通过 Javascript 进行了身份验证。如果没有,则使用 Ajax 让他们登录(没有 changing/losing 当前页面)。然后,在他们通过 Ajax 进行身份验证后,原始上传文件仍在当前页面中指定,然后无需用户再次选择文件即可开始。
当上传请求到达时,您的服务器仍将检查正确的身份验证,但如果用户遵循此路径,则他们应该已经过身份验证。
仅供参考,如果不是用户点击的直接结果,window.open()
通常会被浏览器中的弹出窗口拦截器功能拦截(即便如此,有时仍然会出现问题)。不依赖弹出 windows 会更可靠。通常,您可以使用页面内置的弹出窗口来模拟相同的体验,而不是作为单独的 window.
添加触发器并触发它将调用相同的方法,该方法由按钮调用。在 JQuery 中很容易实现,但在纯 javascript 中 How to trigger event in JavaScript? 可能会对您有所帮助。
在前端的 node.js/express 中,您可以通过 npm i jquery 安装 jqyery 模块。
背景资料
- 我正在开发一个带有 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');
}
非常感谢任何帮助,如果需要可以提供更多信息!
提前致谢。
如果我没记错的话,所有客户端上传的文件都是用户自己挑选的。不允许服务器指定要自行上传的文件(安全问题,因为服务器可以随机定位您硬盘上的任何文件)。相反,用户必须手动 select 上传文件。
您可以做的(为了更好的用户体验)是检查用户是否在客户端通过 Javascript 进行了身份验证。如果没有,则使用 Ajax 让他们登录(没有 changing/losing 当前页面)。然后,在他们通过 Ajax 进行身份验证后,原始上传文件仍在当前页面中指定,然后无需用户再次选择文件即可开始。
当上传请求到达时,您的服务器仍将检查正确的身份验证,但如果用户遵循此路径,则他们应该已经过身份验证。
仅供参考,如果不是用户点击的直接结果,window.open()
通常会被浏览器中的弹出窗口拦截器功能拦截(即便如此,有时仍然会出现问题)。不依赖弹出 windows 会更可靠。通常,您可以使用页面内置的弹出窗口来模拟相同的体验,而不是作为单独的 window.
添加触发器并触发它将调用相同的方法,该方法由按钮调用。在 JQuery 中很容易实现,但在纯 javascript 中 How to trigger event in JavaScript? 可能会对您有所帮助。 在前端的 node.js/express 中,您可以通过 npm i jquery 安装 jqyery 模块。