当前位置:   article > 正文

JS : Blob() 转换二进制下载文件流实例

blob转二进制流

构造Blob对象

Blob对象表示一个不可变的, 原始数据的类似文件对象
  1. var bolb = new Blob( array, options );
  2. 复制代码
array是一个包含实际数据的数组
options是可选的配置属性,其中type是数据的类型
下载文件流
下载文件流的两种方式:blob = new Blob([this.response], {type: type})

1.BlobmsSaveBlob 以本地方式保存文件
window.navigator.msSaveBlob(blob, fileName)

2.BolbURL<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)释放
实例
  1. let fileName = 'kiwi' + '.pdf'
  2. # 创建对象
  3. let xhr = xhr = new XMLHttpRequest()
  4. # 创建一个 GET 请求,异步
  5. xhr.open('GET', http://..., true)
  6. # 设置返回数据的类型为arraybuffer
  7. xhr.responseType = 'arraybuffer'
  8. # 设置请求头值
  9. xhr.setRequestHeader(KEYS.JWTToken, getStorageItem(KEYS.JWTToken))
  10. # 接收到完整的响应数据时触发回调处理函数
  11. xhr.onload = function() {
  12. if (this.status === 200) {
  13. # 获取请求头Content-Type的值,用来判断是否是文件流下载
  14. let type = xhr.getResponseHeader('Content-Type')
  15. # application/json;charset=UTF-8:就是指“无类型”,一般的字节流用于数据传输,非文件下载
  16. if (type === 'application/json;charset=UTF-8') {
  17. # this.response为arraybuffer对象,转为uint8数组
  18. let uint8 = new Uint8Array(this.response)
  19. # 解决使用fromCharCode后中文乱码的问题
  20. let resToString = decodeURIComponent(escape((String.fromCharCode(...uint8))))
  21. let message = JSON.parse(resToString).message
  22. console.log(message)
  23. return
  24. }
  25. # Blob()的第一个参数必须为数组,即使只有一个字符串也必须用数组装起来
  26. var blob = new Blob([this.response], {type: type})
  27. # window.navigator.msSaveBlob:以本地方式保存文件
  28. if (typeof window.navigator.msSaveBlob !== 'undefined') {
  29. window.navigator.msSaveBlob(blob, fileName)
  30. } else {
  31. # 创建新的URL表示指定的File对象或者Blob对象
  32. let URL = window.URL || window.webkitURL
  33. let objectUrl = URL.createObjectURL(blob)
  34. if (fileName) {
  35. # 创建a标签用于跳转至下载链接
  36. var a = document.createElement('a')
  37. # download:指示浏览器下载URL而不是导航到它,也可设置下载文件的名称
  38. if (typeof a.download === 'undefined') {
  39. # window.location:获得当前页面的地址 (URL),并把浏览器重定向到新的页面
  40. window.location = objectUrl
  41. } else {
  42. # href属性指定下载链接
  43. a.href = objectUrl
  44. # dowload属性指定文件名
  45. a.download = fileName
  46. # 将a标签插入body中
  47. document.body.appendChild(a)
  48. # click()事件触发下载
  49. a.click()
  50. # 去除a标签,以免影响其他操作
  51. a.remove()
  52. }
  53. } else {
  54. window.location = objectUrl
  55. }
  56. # 将URL释放
  57. URL.revokeObjectURL(objectUrl)
  58. }
  59. }
  60. }
  61. xhr.send()
  62. 复制代码
slice(star, end)Blod对象进行切分
  1. var kiwi = ["Hi", "kiwi"];
  2. var blob = new Blob(kiwi, { "type" : "text/xml" });
  3. var newBlob = blob.slice(0, 3);
  4. //blob -> Blob{size: 6, type: "text/xml"}
  5. //newBlob -> Blob{size: 3, type: ""}
  6. 复制代码
Blob 属性(只读)
  1. size:Bolb的大小,单位为字节。(应用:判断文件大小)
  2. type:Bolb的MIME类型,如果类型未知,则为""。(应用:判断文件类型)
  3. 复制代码
参考资料:

JavaScript 中 Blob 对象

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/63622
推荐阅读
相关标签
  

闽ICP备14008679号