js使用文件流下載csv文件的實現(xiàn)方法
理解Blob對象
在Blob對象出現(xiàn)之前,在javascript中一直沒有比較好的方式處理二進制文件,自從有了Blob了,我們就可以使用它操作二進制數(shù)據(jù)了。
現(xiàn)在我們開始來理解下Bolb對象及它的文件流下載應(yīng)用場景,話不多說了,來一起看看詳細的介紹吧
1. 創(chuàng)建Blob對象方式如下:
var blob = new Blob(dataArray, options);
dataArray: 它是一個數(shù)組,它包含了要添加到Blob對象中的數(shù)據(jù)。數(shù)組可以是二進制對象或者字符串。
options是可選的對象參數(shù),用于設(shè)置數(shù)組中數(shù)據(jù)的MIME類型。
1. 創(chuàng)建一個DOMString對象的Blob對象。如下代碼:
var str = "<div>Hello World</div>";
var blob = new Blob([str], {type: 'text/xml'});
console.log(blob); // 輸出:Blob {size: 22, type: "text/xml"}
2. 理解URL.createObjectURL對象
window對象的URL對象是用來將blob或file讀取成一個url的。
window.URL.createObjectURL(file / blob);
比如我現(xiàn)在結(jié)合上面的blob對象來生成一個url的簡單demo實列如下所示:
var str = "<div>Hello World</div>";
var blob = new Blob([str], {type: '.csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel'});
console.log(blob);
const url3 = window.URL.createObjectURL(blob);
console.log(url3);
如上代碼第一個打印blob變量值如下:
Blob {size: 22, type: ".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"}
打印第二個url3變量值信息如下:
blob:null/2c75a56e-0104-4572-bc19-391d3bf93d9d
3. 理解HTML5中a標簽的download屬性
HTMl5中給a標簽新增了一個download屬性,只要我們設(shè)置該屬性值,那么點擊該鏈接時瀏覽器不會打開新鏈接,而是會直接下載文件,并且文件名就是 download 的屬性值。
因此結(jié)合這個特點,我們就可以簡單的實現(xiàn)文件流下載文件了,我們首先在原來的代碼基礎(chǔ)之上,再動態(tài)創(chuàng)建一個a鏈接,然后把該a標簽的樣式設(shè)置none, 該鏈接的 href屬性 就是我們上面是有 window.URL.createObjectURL(blob); 生成的url,然后我們把 a鏈接的download屬性設(shè)置下,該屬性值就是我們的下載文件的文件名。最后觸發(fā)點擊功能即可下載了。如下代碼:
var str = "<div>Hello World</div>";
var blob = new Blob([str], {type: '.csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel'});
console.log(blob);
const url3 = window.URL.createObjectURL(blob);
console.log(url3);
var filename = '文件流下載' + '.csv';
const link = document.createElement('a');
link.style.display = 'none';
link.href = url3;
link.setAttribute('download', filename);
document.body.appendChild(link);
link.click();
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。
- Javascript前端下載后臺傳來的文件流代碼實例
- JavaScript進階之前端文件上傳和下載示例詳解
- nodejs實現(xiàn)生成文件并在前端下載
- javascript實現(xiàn)生成并下載txt文件方式
- Node.js實現(xiàn)下載文件的兩種實用方式
- javascript Blob對象實現(xiàn)文件下載
- JavaScript 中如何實現(xiàn)大文件并行下載
- 前端 javascript 實現(xiàn)文件下載的示例
- JavaScript實現(xiàn)多文件下載方法解析
- javascript使用Blob對象實現(xiàn)的下載文件操作示例
- 原生js實現(xiàn)文件上傳、下載、封裝等實例方法
- JavaScript實現(xiàn)文件下載并重命名代碼實例
- js實現(xiàn)文件流式下載文件方法詳解及完整代碼
相關(guān)文章
JS基于對象的特性實現(xiàn)去除數(shù)組中重復(fù)項功能詳解
這篇文章主要介紹了JS基于對象的特性實現(xiàn)去除數(shù)組中重復(fù)項功能,結(jié)合實例形式較為詳細的分析了js基于key值唯一性實現(xiàn)數(shù)組去重的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-11-11
javascript中JSON.parse()與eval()解析json的區(qū)別
這篇文章主要介紹了javascript中JSON.parse()與eval()解析json的區(qū)別,詳細描述了json格式數(shù)據(jù)的操作技巧,并結(jié)合實例形式對比分析了使用JSON.parse()與eval()解析json的區(qū)別,需要的朋友可以參考下2016-05-05
Javascript筆記一 js以及json基礎(chǔ)使用說明
JavaScript中的數(shù)據(jù)很簡潔的。簡單數(shù)據(jù)只有 undefined, null, boolean, number和string這五種,而復(fù)雜數(shù)據(jù)只有一種,即object。2010-05-05
JavaScript 異步調(diào)用框架 (Part 5 - 鏈式實現(xiàn))
在上一篇文章里面,我們?yōu)楫惒秸{(diào)用框架設(shè)計了一種鏈式調(diào)用方式,來增強異步調(diào)用隊列的代碼可讀性,現(xiàn)在我們就來編寫實現(xiàn)這部分功能的代碼。2009-08-08

