HTML5 Blob与ArrayBuffer、TypeArray和字符串String之间转换

摘要:
“],{type:'text/plain'});console.info;console_info;2。将TypeArray转换为Blob对象//将TypeArray转化为Blob对象vararray=newUint16Array//测试成功//varblob=newBlob//测试成功,请注意包[]varblob=newBlob//将Blob对象读入字符串varreader=newFileReader();读者readAsText;读者onload=函数{console.info;//aHelloworld!

1.将String字符串转换成Blob对象

//将字符串 转换成 Blob 对象
var blob = new Blob(["Hello World!"], {
    type: 'text/plain'
});
console.info(blob);
console.info(blob.slice(1, 3, 'text/plain'));

2.将TypeArray  转换成 Blob 对象

//将 TypeArray  转换成 Blob 对象
var array = new Uint16Array([97, 32, 72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33]);
//测试成功
//var blob = new Blob([array], { type: "application/octet-binary" });
//测试成功, 注意必须[]的包裹
var blob = new Blob([array]);
//将 Blob对象 读成字符串
var reader = new FileReader();
reader.readAsText(blob, 'utf-8');
reader.onload = function (e) {
    console.info(reader.result); //a Hello world!
}

ArrayBuffer转Blob

var buffer = new ArrayBuffer(32);
var blob = new Blob([buffer]);       // 注意必须包裹[]

3,将Blob对象转换成String字符串,使用FileReader的readAsText方法

//将字符串转换成 Blob对象
var blob = new Blob(['中文字符串'], {
    type: 'text/plain'
});
//将Blob 对象转换成字符串
var reader = new FileReader();
reader.readAsText(blob, 'utf-8');
reader.onload = function (e) {
    console.info(reader.result);
}

4.将Blob对象转换成ArrayBuffer,使用FileReader的 readAsArrayBuffer方法

//将字符串转换成 Blob对象
var blob = new Blob(['中文字符串'], {
    type: 'text/plain'
});
//将Blob 对象转换成 ArrayBuffer
var reader = new FileReader();
reader.readAsArrayBuffer(blob);
reader.onload = function (e) {
    console.info(reader.result); //ArrayBuffer {}
    //经常会遇到的异常 Uncaught RangeError: byte length of Int16Array should be a multiple of 2
    //var buf = new int16array(reader.result);
    //console.info(buf);

    //将 ArrayBufferView  转换成Blob
    var buf = new Uint8Array(reader.result);
    console.info(buf); //[228, 184, 173, 230, 150, 135, 229, 173, 151, 231, 172, 166, 228, 184, 178]
    reader.readAsText(new Blob([buf]), 'utf-8');
    reader.onload = function () {
        console.info(reader.result); //中文字符串
    };

    //将 ArrayBufferView  转换成Blob
    var buf = new DataView(reader.result);
    console.info(buf); //DataView {}
    reader.readAsText(new Blob([buf]), 'utf-8');
    reader.onload = function () {
        console.info(reader.result); //中文字符串
    };
}

关于Blob对象,请参考:http://www.cnblogs.com/tianma3798/p/4293660.html

免责声明:文章转载自《HTML5 Blob与ArrayBuffer、TypeArray和字符串String之间转换》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何用webgl(three.js)搭建一个3D库房-第一课用Unity模仿CSGO里的火焰效果下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

.net webapi后台返回pdf文件流,前端ajax请求下载,空白pdf排错经历

.net webapi后台返回pdf文件流,前端ajax请求下载,空白pdf排错经历 先上代码: 后台webapi代码: [HttpGet] [Route("{manifestId}")] public IHttpActionResult FindManifestPdfById([FromUri]string manifestId) {     byte...

前端本地文件操作与上传

需要通过用户触发,用户可通过以下三种方式操作触发: 通过input type="file" 选择本地文件 通过拖拽的方式把文件拖过来 在编辑框里面复制粘贴 相关实践:https://www.zhangxinxu.com/wordpress/tag/blob/ 通过input type="file" 选择本地文件 选择文件 第一种是最常用的手段,通常还...

前端导出Excel兼容写法

今天整理出在Web前端导出Excel的写法,写了一个工具类,对各个浏览器进行了兼容。 首先,导出的数据来源可能有两种: 1. 页面的HTML内容(一般是table) 2. 纯数据 PS:不同的数据源,导出的写法也是不相同的。 技术方案 IE 无论数据来源是哪里,都是用ActiveXObject对象及相关的命令,IE10、11有点不同。  非IE 纯数据的...

MySQL 如何存储长度较大的varchar与blob

本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/96 最近,在工作中遇到了MySQL中如何存储长度较长的字段类型问题,于是花了一周多的时间抽空学习了一下,并且记录下来。 MySQL大致的逻辑存储结构在这篇文章中有介绍,做为基本概念:InnoDB 逻辑存储结构 注:文中所...

scala的多种集合的使用(5)之数组Array(ArrayBuffer)的操作

1.创建和更新数组的不同方式 1)定义一个数组的初始大小和类型,随后填充值。 scala> val array = new Array[String](3) array: Array[String] = Array(null, null, null) scala> array(0) = "abc" scala> array(1) =...

ajax发送请求下载字节流形式的excel文件

背景 开发项目中导出功能,因为数据量有点大,所以导出可能需要时间有点长,所以想用ajax异步请求。 存在问题 利用传统的js和jquery提供的ajax相关获取响应的方式是无法实现excel文件下载的。 js的XMLHttpRequest对象提供了responseText和responseXML两个属性,获取的是html和xml文件格式,没有提供二进制流获...