文件流下載詳解

文件流下載是指在網頁上,通過流的方式將文件下載保存到本地電腦上。這種方式可以避免直接打開文件讓用戶進行複製、粘貼等行為,同時也可以節約服務器資源,提高下載速度。接下來從多個方面展開對文件流下載的詳細闡述。

一、文件流下載結束

文件流下載的過程中,通常需要給用戶明確的下載結束提示。可以使用下面的代碼示例來實現:

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-09 11:01
下一篇 2024-12-09 11:01

相關推薦

  • vue下載無後綴名的文件被加上後綴.txt,有後綴名的文件下載正常問題的解決

    本文旨在解決vue下載無後綴名的文件被加上後綴.txt,有後綴名的文件下載正常的問題,提供完整的代碼示例供參考。 一、分析問題 首先,需了解vue中下載文件的情況。一般情況下,我們…

    編程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件並生成完整的圖像

    OBJ格式是一種用於表示3D對象的標準格式,通常由一組頂點、面和紋理映射坐標組成。在本文中,我們將討論如何將多個OBJ文件拼接在一起,生成一個完整的3D模型。 一、讀取OBJ文件 …

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • 為什麼用cmd運行Java時需要在文件內打開cmd為中心

    在Java開發中,我們經常會使用cmd在命令行窗口運行程序。然而,有時候我們會發現,在運行Java程序時,需要在文件內打開cmd為中心,這讓很多開發者感到疑惑,那麼,為什麼會出現這…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Python zipfile解壓文件亂碼處理

    本文主要介紹如何在Python中使用zipfile進行文件解壓的處理,同時詳細討論在解壓文件時可能出現的亂碼問題的各種解決辦法。 一、zipfile解壓文件亂碼問題的根本原因 在P…

    編程 2025-04-29
  • Python將矩陣存為CSV文件

    CSV文件是一種通用的文件格式,在統計學和計算機科學中非常常見,一些數據分析工具如Microsoft Excel,Google Sheets等都支持讀取CSV文件。Python內置…

    編程 2025-04-29
  • Python如何導入py文件

    Python是一種開源的高級編程語言,因其易學易用和強大的生態系統而備受青睞。Python的import語句可以幫助用戶將一個模塊中的代碼導入到另一個模塊中,從而實現代碼的重用。本…

    編程 2025-04-29
  • Python合併多個相同表頭文件

    對於需要合併多個相同表頭文件的情況,我們可以使用Python來實現快速的合併。 一、讀取CSV文件 使用Python中的csv庫讀取CSV文件。 import csv with o…

    編程 2025-04-29
  • Python寫文件a

    Python語言是一種功能強大、易於學習、通用並且高級編程語言,它具有許多優點,其中之一就是能夠輕鬆地進行文件操作。文件操作在各種編程中都佔有重要的位置,Python作為開發人員常…

    編程 2025-04-29

發表回復

登錄後才能評論