簡體   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