構造Blob對象
Blob對象表示一個不可變的, 原始數據的相似文件對象
var bolb = new Blob( array, options );
複製代碼
array
是一個包含實際數據的數組
options
是可選的配置屬性,其中type
是數據的類型
下載文件流
下載文件流的兩種方式:blob = new Blob([this.response], {type: type})
1.Blob
和 msSaveBlob
以本地方式保存文件
window.navigator.msSaveBlob(blob, fileName)
2.Bolb
、URL
和<a>
配合下載
objectUrl = window.URL.createObjectURL(blob)
建立新的URL表示指定Blob對象
a = document.createElement('a')
建立a標籤
a.href = objectUrl
指定下載連接
a.download = fileName
指定下載文件名
a.click()
觸發下載
a.remove()
除a標籤
window.URL.revokeObjectURL(objectUrl)
釋放
實例
let fileName = 'kiwi' + '.pdf'
let xhr = xhr = new XMLHttpRequest()
xhr.open('GET', http://..., true)
xhr.responseType = 'arraybuffer'
xhr.setRequestHeader(KEYS.JWTToken, getStorageItem(KEYS.JWTToken))
xhr.onload = function() {
if (this.status === 200) {
let type = xhr.getResponseHeader('Content-Type')
if (type === 'application/json;charset=UTF-8') {
let uint8 = new Uint8Array(this.response)
let resToString = decodeURIComponent(escape((String.fromCharCode(...uint8))))
let message = JSON.parse(resToString).message
console.log(message)
return
}
var blob = new Blob([this.response], {type: type})
if (typeof window.navigator.msSaveBlob !== 'undefined') {
window.navigator.msSaveBlob(blob, fileName)
} else {
let URL = window.URL || window.webkitURL
let objectUrl = URL.createObjectURL(blob)
if (fileName) {
var a = document.createElement('a')
if (typeof a.download === 'undefined') {
window.location = objectUrl
} else {
a.href = objectUrl
a.download = fileName
document.body.appendChild(a)
a.click()
a.remove()
}
} else {
window.location = objectUrl
}
URL.revokeObjectURL(objectUrl)
}
}
}
xhr.send()
複製代碼
用slice(star, end)
對Blod
對象進行切分
var kiwi = ["Hi", "kiwi"];
var blob = new Blob(kiwi, { "type" : "text/xml" });
var newBlob = blob.slice(0, 3);
//blob -> Blob{size: 6, type: "text/xml"}
//newBlob -> Blob{size: 3, type: ""}
複製代碼
Blob 屬性(只讀)
size:Bolb的大小,單位爲字節。(應用:判斷文件大小)
type:Bolb的MIME類型,若是類型未知,則爲""。(應用:判斷文件類型)
複製代碼
參考資料:
JavaScript 中 Blob 對象web