前几天在上传文件过程中遇到Blob对象和File对象的相关问题,查资料结果如下:

blob

在浏览器环境下,可以实现对blob的引用(浏览器会自动集成);但是在nodeJS环境下如何实现blob引用?文件传入依赖?具体怎样使用blob?

要求:首先在Node环境下上传简单文件。 File是特殊类型的Blob,也是一个API接口

参考网站:https://stackoverflow.com/questions/15293694/blob-constructor-browser-compatibility

部分浏览器不支持blob,支持旧的BlobBuilder:原文如下:

So, these are actually two different problems. The Desktop Chrome warning was a bug in chrome which is fixed since 2013-03-21. Mobile Chrome is giving you a TypeError because the blob constructor is not supported. Instead you must use the old BlobBuilder API. The BlobBuilder API has browser specific BlobBuilder constructors. This is the case for FF6 - 12, Chrome 8-19, Mobile Chrome, IE10 and Android 3.0-4.2.

首先判断浏览器版本是否支持Blob(File)

var array = new Int8Array([17, -45.3]);try{var jpeg = new Blob( [array], {type : "image/jpeg"});
}
catch(e){// TypeError old chrome and FFwindow.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;if(e.name == 'TypeError' && window.BlobBuilder){var bb = new BlobBuilder();bb.append(array.buffer);var jpeg = bb.getBlob("image/jpeg");}else if(e.name == "InvalidStateError"){// InvalidStateError (tested on FF13 WinXP)var jpeg = new Blob( [array.buffer], {type : "image/jpeg"});}else{// We're screwed, blob constructor unsupported entirely   }
}

结论:解决方案:blob存在一些兼容问题(仍然是主流的上传构造函数),blobbuilder已经逐步淘汰,或者最新的Fold接口集成了blob的方法。

Blob API

Binary large Object 二进制大对象 数据库中Blob就是二进制容器(MYSQL中) 在web API中,Blob对象表示类似于文件的二进制数据,File对象继承自Blob对象。

创建Blob对象:
Blob(blobParts, [options])
参数1:数组类型参数
参数2:可选,type,表示数据的类型
console.log(blob1); //输出blob对象包含数据的字节数

var blob2 = blob1.slice(start, end, contentType);
返回一个新的Blob对象,包含了原始对象中的指定范围的数据
使用:大文件分片上传


File对象

File API

01 浏览器兼容性检查

function isSupportFileApi() {if(window.File && window.FileList && window.FileReader && window.Blob) {return true;}return false;
}

02 获取文件句柄
JS只能被动获取文件,只有用户触发事件(拖拽文件、提交表单)JS,才能获取文件句柄
注意:拖拽事件可能会使用浏览器打开文件,需要preventDefault or cancalBable

03 读取文件
FileReader提供了接口和事件
类似于组件的生命周期,Filereader的生命周期:
onloadstart-onprogress-onload-onabort-onerror-onloaded
可以预览本地文件,预览本地图片,监控读取进度。

04 分割文件
当文件较大,分段读取上传最好(断点上传)slice方法(公司在这方面应该做的很好)

相关网站:

https://developer.mozilla.org/zh-CN/docs/Web/API/Blob

https://www.cnblogs.com/xiaoqian1993/p/5775135.html

https://www.cnblogs.com/leejersey/p/4772504.html

https://segmentfault.com/a/1190000011563430

http://hushicai.com/2014/03/29/html5-du-qu-ben-di-wen-jian.html

Blob和File对象API与兼容性问题相关推荐

  1. blob转file对象_JavaScript Blob 对象解析

    Blob是JavaScript内建对象,表示不可变的原始数据的类似文件的对象. blob是表示原始数据的不可变对象,这些数据不一定是javascript原生格式的,文件接口基于Blob,继承Blob功 ...

  2. blob转file对象_C++核心准则C.41:构造函数生成的对象应该被完全初始化

    C.41: A constructor should create a fully initialized object C.41构造函数生成的对象应该被完全初始化 Reason(原因) A cons ...

  3. [JS] 聊一聊File对象

    File 是一个构造函数 是一种特殊的Blob const fooFile = new File(['foo'], 'foo.txt', {type: ''text/plain})  // 得到一个内 ...

  4. HTML5 file对象和blob对象的互相转换

    使用FileReader 对象转换:File => DataURL 该对象用于读取文件(读取单个对象文件,所以,不能直接读取 Filelist 对象文件集合),即把文件内容读入内存.它接收 Fi ...

  5. js二进制流转Blob对象。Blob对象再转File对象

    JavaScript 二进制转文件 使用js将blob对象转file对象 前端处理后端返回的二进制流文件 js中Blob对象一般用法 js中关于Blob对象的介绍与使用 上传的文件对象 完整代码实例 ...

  6. 前端使用js-audio-recorder组件实现录音、语音下载、播放等【含blob对象转换为file对象】

    本文范例代码使用vue2.0开发 首先当然是在项目中安装包 npm install js-audio-recorder 然后在页面中引入 import Recorder from 'js-audio- ...

  7. 理解DOMString、Document、FormData、Blob、File、ArrayBuffer数据类型

    FormData 对象的使用地址:https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/Using_FormData_Objects 一. ...

  8. DOMString、Document、FormData、Blob、File、ArrayBuffer数据类型

    一.XMLHttpRequest 2.0的家臣们 我大学那会儿,一个称为Ajax的东西对前端行业造成了深远影响,不仅是JS语言,而包括前端地位.职位兴起以及工作分工等.抛开IE6浏览器不谈,其他浏览器 ...

  9. javascript内置对象API

    文章目录 常用api Date String Math对象 Array 定义对象的几种方法 JSON对象 Number对象 Boolean对象 Storage 对象分为两类( sessionStora ...

  10. 图片或文件Blob、File、Base64之间的相互转换

    Blob.File.Base64之间的相互转换 前言 base64 转 Blob 对象 base64 转 File 对象 File 对象,Blob 对象 转base64 blob链接转 base64 ...

最新文章

  1. CUDA Samples: matrix multiplication(C = A * B)
  2. 【文字检测算法整理】
  3. VTK:PolyData之ConnectivityFilter_SpecifiedRegion
  4. oracle12c双机热备方案,Oracle 共享磁盘阵列 双机热备 实战 配置教程 配置手册
  5. bootstrap-表单控件——单选按钮水平排列
  6. 有哪些编辑软件可以编辑c语言,可以推荐一个手机上最好用且免费的c语言编辑器吗?...
  7. MySQL基础操作(一)
  8. oracle学习数据,Oracle从入门到精通的学习笔记
  9. nginx proxy_cache缓存详解
  10. 【ACDU】国产数据库有奖征文活动开始啦!发原创奖京东卡,最高可领1000元!...
  11. ssis 派生列_SSIS脚本组件与派生列
  12. 大数据需留意的六个安全问题
  13. spring源码分析AOP原理图文详解
  14. 原生android 操作系统,为什么氢OS被称为最接近原生安卓的操作系统?
  15. xp系统打印机服务器报错,互联网要点:Win7系统连接XP共享打印机报错0X000004如何解决...
  16. 第一周礼拜四 神藉着祂的众仆人行事(上)
  17. 算术编码原理及其python实现
  18. android qq空间相册,QQ空间Android3.3发布 新增空间、相册权限设置
  19. 如何在Mac上刻录DVD以获取可播放的视频?解答来了
  20. Centos7.1安装CUDA7.0

热门文章

  1. C#使用iTextSharp打印PDF
  2. 动态爬取链家二手房成交记录并保存至Excel
  3. springboot-shiro-jwt-redis实现用户登录的认证与授权(前后端分离)需要有一定shiro、jwt、redis、springboot基础
  4. limbo模拟器安装linux,limbo模拟器win10镜像安装使用教程(附下载)
  5. npm install 提示 path .../node_modules/node-sass command failed
  6. 智能智慧型停车场管理系统解决方案
  7. 对《骨骼运动变换的数学计算过程详解》一文的理解
  8. css div背景图大小,divcss如何改变背景图片大小
  9. EndNote新手入门教程
  10. 微信浪漫告白小程序java_微信表白小程序有哪些?微信小程序520表白神器推荐...