< p >JavaScript是一種廣泛使用的腳本語言,可以實現動態效果,高端UI,和實現應用級邏輯等。當用戶使用Web應用時,可以通過JavaScript從瀏覽器中讀取和寫入數據、控制網頁內容的行為和狀態。然而,JavaScript想要調用瀏覽器下載路徑卻并不容易,接下來我們來具體討論如何實現這個功能。< /p >
< p >當開發者需要實現文件的下載時,常見的方式是通過將文件轉碼為DataURI(數據URI,它就是一種給文本、應用程序及資源提供相同的訪問機制的URI),然后設置文件的名稱以及Path,將到處的DataURI鏈接設為一個錨點的下載鏈接。具體代碼實現如下:< /p >
< pre >function download(dataUrl, fileName) { var a = document.createElement('a'); a.download = fileName; a.href = dataUrl; document.body.appendChild(a); a.click(); setTimeout(function () { document.body.removeChild(a); window.URL.revokeObjectURL(dataUrl); }, 0) } // 示例:var dataURI = "data:text/html,content"; // download(dataURI, "test.txt");< /pre>
< p >上述代碼中,我們首先創建了一個
< p >我們在實際生產環境中,也可以利用服務端來生成URL供客戶端進行下載,以此提高下載文件的效率以及安全性。一個常見的實現步驟是首先將文件上傳到服務器上,并獲取到服務器端存儲的相對地址。接下來,我們使用XMLHttpRequest(XHR)對象發送POST請求將服務器端文件地址發給服務端,服務端會生成一個唯一的Token并返回給客戶端。客戶端再次發送請求包含這個Token,由服務端來驗證這個Token,如果驗證通過,返回文件流信息并開始下載。關鍵的JS實現代碼如下:
< pre >function download(url, name) { let xhr = new XMLHttpRequest(); xhr.open('POST', '/path/to/server', true); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.responseType = 'json'; xhr.onload = function() { let { success, token } = xhr.response; if (success && token) { let downloadXhr = new XMLHttpRequest(); downloadXhr.open('GET', '/path/to/file?token='+token, true); downloadXhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); downloadXhr.responseType = 'blob'; downloadXhr.onload = function() { const content = downloadXhr.responseText; const blob = new Blob([content]); var a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = name; document.body.appendChild(a); a.click(); }; downloadXhr.send(); } } xhr.send(url); } // 示例:download("/path/to/file", "test.txt");< /pre>
< p >上述代碼中,我們使用了XHR對象來發送POST請求到服務端,返回success屬性表示請求是否成功,token屬性為服務端生成的唯一的Token。當請求成功且Token存在時,我們再次發送請求到服務端獲取文件流信息。并根據文件的二進制流生成一個Blob對象,最后通過作為URL對象來開啟一個下載文件的鏈接,使得客戶端可以順利下載文件。
< p >總結,JavaScript調用瀏覽器下載路徑的方法一般有兩種途徑:一種是直接使用DataURI,在客戶端生成唯一文件地址供下載;另一種則是通過服務端生成唯一Token并根據Token來驗證并獲取文件二進制流進行下載。以上兩種方法在實際生產環境中都能夠實現較高質量的下載文件操作。感謝您閱讀本文,希望能對您有所幫助。< /p >
< p >當開發者需要實現文件的下載時,常見的方式是通過將文件轉碼為DataURI(數據URI,它就是一種給文本、應用程序及資源提供相同的訪問機制的URI),然后設置文件的名稱以及Path,將到處的DataURI鏈接設為一個錨點的下載鏈接。具體代碼實現如下:< /p >
< pre >function download(dataUrl, fileName) { var a = document.createElement('a'); a.download = fileName; a.href = dataUrl; document.body.appendChild(a); a.click(); setTimeout(function () { document.body.removeChild(a); window.URL.revokeObjectURL(dataUrl); }, 0) } // 示例:var dataURI = "data:text/html,content"; // download(dataURI, "test.txt");< /pre>
< p >上述代碼中,我們首先創建了一個
元素,并且設置了文件的名稱和路徑,然后將這個元素添加到
中。接下來我們模擬同一個元素的click()
事件觸發下載動作,最后將
元素從
中移除并釋放二進制的資源。< p >我們在實際生產環境中,也可以利用服務端來生成URL供客戶端進行下載,以此提高下載文件的效率以及安全性。一個常見的實現步驟是首先將文件上傳到服務器上,并獲取到服務器端存儲的相對地址。接下來,我們使用XMLHttpRequest(XHR)對象發送POST請求將服務器端文件地址發給服務端,服務端會生成一個唯一的Token并返回給客戶端。客戶端再次發送請求包含這個Token,由服務端來驗證這個Token,如果驗證通過,返回文件流信息并開始下載。關鍵的JS實現代碼如下:
< pre >function download(url, name) { let xhr = new XMLHttpRequest(); xhr.open('POST', '/path/to/server', true); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.responseType = 'json'; xhr.onload = function() { let { success, token } = xhr.response; if (success && token) { let downloadXhr = new XMLHttpRequest(); downloadXhr.open('GET', '/path/to/file?token='+token, true); downloadXhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); downloadXhr.responseType = 'blob'; downloadXhr.onload = function() { const content = downloadXhr.responseText; const blob = new Blob([content]); var a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = name; document.body.appendChild(a); a.click(); }; downloadXhr.send(); } } xhr.send(url); } // 示例:download("/path/to/file", "test.txt");< /pre>
< p >上述代碼中,我們使用了XHR對象來發送POST請求到服務端,返回success屬性表示請求是否成功,token屬性為服務端生成的唯一的Token。當請求成功且Token存在時,我們再次發送請求到服務端獲取文件流信息。并根據文件的二進制流生成一個Blob對象,最后通過作為URL對象來開啟一個下載文件的鏈接,使得客戶端可以順利下載文件。
< p >總結,JavaScript調用瀏覽器下載路徑的方法一般有兩種途徑:一種是直接使用DataURI,在客戶端生成唯一文件地址供下載;另一種則是通過服務端生成唯一Token并根據Token來驗證并獲取文件二進制流進行下載。以上兩種方法在實際生產環境中都能夠實現較高質量的下載文件操作。感謝您閱讀本文,希望能對您有所幫助。< /p >