摘要:直接通過構(gòu)造函數(shù)進(jìn)行創(chuàng)建。構(gòu)造函數(shù)是一個對象,可以包含下面兩個屬性類型類型未知返回空字符串決定的數(shù)據(jù)格式數(shù)據(jù)中的如何被轉(zhuǎn)換,可以取值為不變默認(rèn)或者按操作系統(tǒng)轉(zhuǎn)換方法返回一個新的對象,包含了源對象中指定范圍內(nèi)的數(shù)據(jù)。
front-end
前段時間項(xiàng)目中有個需求,將數(shù)據(jù)導(dǎo)出為csv。最近閑下來,整理下相關(guān)知識點(diǎn)。
What is Blob一個 Blob對象表示一個不可變的, 原始數(shù)據(jù)的類似文件對象。Blob表示的數(shù)據(jù)不一定是一個JavaScript原生格式。 File 接口基于Blob,繼承 blob功能并將其擴(kuò)展為支持用戶系統(tǒng)上的文件。
通俗來說, Blob 是一個js對象類型,存著二進(jìn)制數(shù)據(jù)。
How to use直接通過構(gòu)造函數(shù)進(jìn)行創(chuàng)建。
構(gòu)造函數(shù):Blob(blobParts[, options])
options是一個對象,可以包含下面兩個屬性:
type -- MIME類型, 類型未知返回空字符串
endings -- 決定 append() 的數(shù)據(jù)格式(數(shù)據(jù)中的 n 如何被轉(zhuǎn)換),可以取值為"transparent"(不變, 默認(rèn))或者"native"(按操作系統(tǒng)轉(zhuǎn)換);
let debug = {debug: "this is a test"}; let blob = new Blob(JSON.stringify(debug, null, 2));方法 slice
var blob = instanceOfBlob.slice([start [, end [, contentType]]]};
返回一個新的 Blob 對象,包含了源 Blob 對象中指定范圍內(nèi)的數(shù)據(jù)。
實(shí)例 使用 Blob 下載文件。/** * 使用 Blob 下載文本,字符串,json * * @param {String} content 已轉(zhuǎn)string的文本、json等 * @param {String} filename 下載時文件取名為? **/ const funcDownload = (content, filename, type = "text/plain") => { let downLink = document.createElement("a"); // 支持a鏈接下載? if (!("download" in downLink)) return false; downLink.download = filename; downLink.style.display = "none"; // 字符串內(nèi)容轉(zhuǎn)blob地址 let blobURL = new Blob([content], {type}); downLink.href = URL.createObjectURL(blobURL); // 觸發(fā)下載 document.body.appendChild(downLink); downLink.click(); // 移除 a 節(jié)點(diǎn) document.body.removeChild(downLink); };通過二進(jìn)制傳輸圖片的瀏覽器端處理
假設(shè)需求是這樣的,二進(jìn)制數(shù)據(jù)的第一位是一個標(biāo)識符,指代該圖的分類,之后是image的二進(jìn)制數(shù)據(jù)。
ws.onmessage = (event) => { if(event.data.instanceof Blob) { let blob = event.data; // 拆分 blob const blobImgFlag = blob.slice(0, 1); const blobImg = blob.slice(1); // 將 blob 的 img flag 轉(zhuǎn)成字符串 let reader = new FileReader(); reader.readAsBinaryString(blobImgFlag); // 讀取成功 callback reader.onload = function (evt) { if(evt.target.readyState === FileReader.DONE) { const imgFlag = evt.target.result; // ... 根據(jù)得到的 imgFlag 做點(diǎn)啥, 如 let img = document.getElementById(`img-${imgFlag}`); // 顯示在頁面中 img.src = URL.createObjectURL(blogImg); } } } }將表格下載到 csv
這里其實(shí)用的就是第一個實(shí)例的方法,不過如果涉及到中文,需要指定下編碼跟加上BOM頭防亂碼。
// 你需要把數(shù)據(jù)拼接為字符串,單元格與單元格用逗號(,)分隔, 行與行用換行符( )分隔。 如: let content = "時間,正常(0<=評分<70),疑似(70<=評分<90),欺詐(90<=評分<=100), 2017/09/07 00:00,0,0,0, 2017/09/07 01:00,0,0,0, 2017/09/07 02:00,0,0,0, 2017/09/07 03:00,0,0,0, 2017/09/07 04:00,0,0,0, 2017/09/07 05:00,0,0,0, 2017/09/07 06:00,0,0,0, 2017/09/07 07:00,0,0,0, 2017/09/07 08:00,0,0,0, 2017/09/07 09:00,0,0,0, "; const fileName = "balabala.csv"; // 如果有問題,試試 "text/csv;chartset=utf-8" const type = "text/plain;chartset=utf-8"; funcDownload(content, fileName, type);Reference
MDN/API/Blob
js中從blob提取二進(jìn)制
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/88414.html
摘要:受限于請求需要后端分頁接口性能等原因不得不放棄的導(dǎo)出方式。所以我需要尋找一種可行的合理的優(yōu)雅的導(dǎo)出方案,那就是。方案實(shí)現(xiàn)方案介紹是利用標(biāo)簽的和屬性來實(shí)現(xiàn)的。至此,這個問題算是完整的解決了。 問題描述 項(xiàng)目里需要實(shí)現(xiàn)一個導(dǎo)出csv的功能,這是個老生常談的需求,而且我們使用的是iview的組件庫,按道理說實(shí)現(xiàn)起來應(yīng)該簡單,但實(shí)則不然,我在做的時候遇到了一些問題。受限于請求需要token、后...
摘要:前言將數(shù)據(jù)報表導(dǎo)出,是數(shù)據(jù)報告展示常用的附帶功能。今天我們主要講的是直接通過前端將數(shù)據(jù)導(dǎo)出的格式的文件。但其實(shí)真正的答案應(yīng)該是把相應(yīng)的數(shù)據(jù)轉(zhuǎn)換成和。若是超過瀏覽器自身限制的最大長度,會導(dǎo)致下載失敗。 前言 將數(shù)據(jù)報表導(dǎo)出,是web數(shù)據(jù)報告展示常用的附帶功能。通常這種功能都是用后端開發(fā)人員編寫的。今天我們主要講的是直接通過前端js將數(shù)據(jù)導(dǎo)出Excel的CSV格式的文件。 原理 首先在本地...
摘要:前言將數(shù)據(jù)報表導(dǎo)出,是數(shù)據(jù)報告展示常用的附帶功能。今天我們主要講的是直接通過前端將數(shù)據(jù)導(dǎo)出的格式的文件。但其實(shí)真正的答案應(yīng)該是把相應(yīng)的數(shù)據(jù)轉(zhuǎn)換成和。若是超過瀏覽器自身限制的最大長度,會導(dǎo)致下載失敗。 前言 將數(shù)據(jù)報表導(dǎo)出,是web數(shù)據(jù)報告展示常用的附帶功能。通常這種功能都是用后端開發(fā)人員編寫的。今天我們主要講的是直接通過前端js將數(shù)據(jù)導(dǎo)出Excel的CSV格式的文件。 原理 首先在本地...
摘要:不過這種方式有問題,目前查到的大部分過程都是會在服務(wù)器新建出一個文件,等下載完畢在做刪除,還沒有找到可以跨過這一步的方式。 showImg(https://segmentfault.com/img/remote/1460000018850368); Content-Disposition / Content-Type Content-Disposition http 頭部的 Conte...
閱讀 5030·2021-09-07 09:58
閱讀 781·2019-08-30 15:55
閱讀 2909·2019-08-30 15:55
閱讀 915·2019-08-30 15:53
閱讀 1549·2019-08-29 12:57
閱讀 1796·2019-08-26 13:46
閱讀 558·2019-08-26 11:00
閱讀 3658·2019-08-23 15:42