文件流下載是指在網頁上,通過流的方式將文件下載保存到本地電腦上。這種方式可以避免直接打開文件讓用戶進行複製、粘貼等行為,同時也可以節約服務器資源,提高下載速度。接下來從多個方面展開對文件流下載的詳細闡述。
一、文件流下載結束
文件流下載的過程中,通常需要給用戶明確的下載結束提示。可以使用下面的代碼示例來實現:
try { // 下載操作 } catch (e) { // 異常處理 } finally { alert('文件下載完成'); }
在try-catch語句中設置下載操作,無論操作成功或失敗,都會彈出一個提示框提示用戶文件下載已完成。
二、文件流下載完文件不存在
下載文件時,如果文件不存在,需要給出明確的提示信息。下面是一個簡單的功能實現方案:
function downloadFile() { var url = '/download?file=filename'; // 文件下載地址和文件名 var xhr = new XMLHttpRequest(); xhr.open('GET', url); xhr.responseType = 'blob'; xhr.onload = function() { if (this.status === 200) { var blob = new Blob([this.response], { type: 'application/zip' }); if (typeof window.navigator.msSaveBlob !== 'undefined') { window.navigator.msSaveBlob(blob, 'filename.zip'); } else { var url = window.URL.createObjectURL(blob); var a = document.createElement('a'); a.href = url; a.download = 'filename.zip'; document.body.appendChild(a); a.click(); setTimeout(function() { document.body.removeChild(a); window.URL.revokeObjectURL(url); }, 0); } } else { alert('文件不存在'); } }; xhr.send(); }
以上代碼使用XMLHttpRequest對象發送請求,判斷返回值的狀態碼是否為200,並驗證返回值的類型是否合法。如果文件不存在,使用alert()函數彈出提示框,否則執行下載操作。
三、文件流下載到本地
文件流下載到本地需要使用瀏覽器的下載功能。可以使用以下示例代碼來實現文件下載:
var filename = 'filename.zip'; var url = '/download?file=filename'; // 文件下載地址和文件名 var link = document.createElement('a'); document.body.appendChild(link); link.style.display = 'none'; link.href = url; link.setAttribute('download', filename); link.click(); document.body.removeChild(link);
使用以上代碼,瀏覽器將下載文件並保存到默認的下載路徑中。在上述代碼中,使用創建的a標籤中的download屬性,設置下載文件的文件名。link.style.display = ‘none’語句用於頁面中不出現下載代碼。
四、文件流下載excel
文件流下載Excel文件形式使用很廣泛,以下示例代碼可以實現Excel文件下載:
var excelData = 'aaa\tbbb\tccc\n111\t222\t333\n'; var filename = 'test.xlsx'; fileSaver.saveAs(new Blob(["\ufeff", excelData], {type: 'text/plain;charset=utf-8'}), filename);
文件流下載Excel文件需要使用第三方庫fileSave.js中的saveAs()方法。在上述代碼中,使用Blob對象生成一個Excel文件,並將文件保存到指定的路徑下。
五、文件流下載後台設置文件名
文件流下載後台設置文件名的方法不同於前面的示例。需要在後台設置返回的HttpResponse對象中的文件名。示例代碼如下:
@RequestMapping("/download") public ResponseEntity<byte[]> download() throws IOException { String filename = "xxx.jpg"; File file = new File("C:\\Users\\Administrator\\Desktop\\xxx.jpg"); HttpHeaders headers = new HttpHeaders(); headers.setContentDispositionFormData("attachment", filename); // 設置文件名 headers.setContentType(MediaType.IMAGE_JPEG); return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK); }
以上代碼中,通過HttpHeaders對象設置文件名,將文件下載請求的返回結果設置為ResponseEntity<byte[]>,從而實現下載。
六、文件流下載漏洞
文件流下載有一些漏洞,需要在實現文件下載功能時予以防範。例如:文件下載目錄的安全驗證,文件下載地址的完整性驗證,文件後綴的正則驗證等。在編碼實現時,務必注意這些安全問題,防止被黑客攻擊。
七、js文件流下載
在JavaScript中,使用FileReader對象,可以實現對文件流的讀取和下載。下面是一個簡單的文件下載示例代碼:
function downloadFile() { var blob = new Blob(['Hello, world!'], { type: 'text/plain;charset=utf-8' }); var link = document.createElement('a'); link.href = window.URL.createObjectURL(blob); link.download = 'hello.txt'; link.click(); }
以上代碼中,定義一個blob對象,使用createObjectURL()方法為其創建一個URL對象,並將這個URL對象賦值給a標籤的href屬性。最後,使用click()方法觸發a標籤進行文件下載操作。
八、vue文件流下載
在Vue中,可以通過在組件中使用axios庫發送請求來實現文件流下載。
九、vue接收文件流並下載
在Vue中,可以使用fileSaver.js庫在前端實現文件下載。以下是一個簡單的代碼示例:
downloadFile() { axios.get('/download', { responseType: 'blob' }).then(res => { const blob = new Blob([res.data], {type: 'application/zip'}) const downloadElement = document.createElement('a') const href = window.URL.createObjectURL(blob) // 創建下載路徑URL對象 downloadElement.href = href downloadElement.download = 'filename.zip' // 設置下載文件名 document.body.appendChild(downloadElement) downloadElement.click() // 觸發下載操作 document.body.removeChild(downloadElement) // 刪除創建的下載組件元素 window.URL.revokeObjectURL(href) // 釋放URL地址資源 }).catch(error => { console.log(error) }) }
在以上Vue代碼中,使用axios發送後台請求,得到數據之後,使用Blob對象生成文件數據,並將數據把URL轉化為下載鏈接,最後調用a標籤的click()方法下載文件。
十、vue下載文件到本地選取
在Vue中,使用fileSaver.js庫可以實現下載文件到本地選取。以下是一個簡單的代碼示例:
downloadFile() { axios.get('/download', { responseType: 'blob' }).then(res => { const blob = new Blob([res.data], {type: 'application/zip'}) fileSaver.saveAs(blob, 'filename.zip') }).catch(error => { console.log(error) }) }
在上述代碼中,使用axios發送後台請求,並使用fileSaver.js庫保存文件到本地中。
十一、總結
以上是對文件流下載的詳細闡述,從主要功能實現,到安全防範,再到Vue中的實現,都有所涉及。在實現文件流下載功能時,一定要注意文件名、目錄路徑等安全措施,以避免遭到黑客攻擊。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/219795.html