问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

js前端接受blob对象数组怎么去操作

发布网友 发布时间:2022-04-07 05:55

我来回答

3个回答

懂视网 时间:2022-04-07 10:17

构建一个Blob对象通常有三种方式:

1、通过Blob对象的构造函数来构建。

2、从已有的Blob对象调用slice接口切出一个新的Blob对象。

3、canvas API toBlob方法,把当前绘制信息转为一个Blob对象。下面只看第一种的实现:

用法:新方法创建Blob 对象(构造函数来构建)

var blob = new Blob(array[optional], options[optional]);

构造函数,接受两个参数

第一个参数:为一个数据序列,可以是任意格式的值,例如,任意数量的字符串,Blobs 以及 ArrayBuffers。

第二个参数:用于指定将要放入Blob中的数据的类型(MIME)(后端可以通过枚举MimeType,获取对应类型:

MimeType mimeType = MimeType.toEnum(file.getContentType());)。
 <script>
 var blob = new Blob(["Hello World!"],{type:"text/plain"});
 </script>

Blob对象的基本属性:

size :Blob对象包含的字节数。(只读)

type : Blob对象包含的数据类型MIME,如果类型未知则返回空字符串。

原生对象构建Blob

<script type="text/javascript">
window.onload = function() {
 var blob = new Blob(1234);
}
</script>

提示出错:

Uncaught TypeError: Failed to construct ‘Blob': The 1st argument is neither an array, nor does it have indexed properties.

原因在于Blob构造函数要求第一个参数必须是数组,而这里第一个参数既不是一个数组,也没有可索引的属性。既然这里提到了对象的可索引属性,让我联想到了类数组的概念,而Arguments就是一个很好的例子。来试一试:

<script type="text/javascript">
function testArgumentsBlob() {
 var blob = new Blob(arguments);
 console.log(blob.size);//3
 console.log(blob.type);//""
}
window.onload = function() {
 testArgumentsBlob(1, 2, 3);
}
</script>

可以看到即使是类数组对象,而数组元素类型是Number也能得出正确的结论,猜想大概是由于构造函数内部把Number转化为String的缘故吧!

再来试一试其他的参数类型:

window.onload = function() {
 var arg = {hello: "2016"};
 var blob = new Blob([JSON.stringify(arg, null, "	")], {type: "application/json"});
 console.log(blob.type);//application/json
 console.log(blob.size);//20
}

blob.type等于application/json没问题。arg转为字符串后的长度为16加上制表符 的宽度4个字节等于20。

Blob对象的基本方法:

大文件分割 (slice() 方法),slice方法与数组的slice类似。

Blob.slice([start, [end, [content-type]]])

slice() 方法接受三个参数,起始偏移量,结束偏移量,还有可选的 mime 类型。如果 mime 类型,没有设置,那么新的 Blob 对象的 mime 类型和父级一样。

当要上传大文件的时候,此方法非常有用,可以将大文件分割分段,然后各自上传,因为分割之后的 Blob 对象和原始的是独立存在的。

不过目前浏览器实现此方法还没有统一,火狐使用的是 mozSlice() ,Chrome 使用的是 webkitSlice() ,其他浏览器则正常的方式 slice()

可以写一个兼容各浏览器的方法:

 function sliceBlob(blob, start, end, type) {
 type = type || blob.type;
 if (blob.mozSlice) {
 return blob.mozSlice(start, end, type);
 } else if (blob.webkitSlice) {
 return blob.webkitSlice(start, end type);
 } else {
 throw new Error("This doesn't work!");
 }
 }

利用Blob显示缩略图

var input = document.createElement("input");
input.type = "file";
input.accept = "image/*";
input.multiple = true;
input.style.display = "none";
document.body.appendChild(input);

var fileSelect = document.createElement("a");
fileSelect.href = "#";
fileSelect.appendChild(document.createTextNode("Choose files"));
document.body.appendChild(fileSelect);

var imgList = document.createElement("div");
imgList.innerHTML = "<p>No file Selected!</p>"
document.body.appendChild(imgList);

input.addEventListener("change", function(e) {
var files = this.files;
if(!files.length) {
return;
}
imgList.innerHTML = "";
var list = document.createElement("ul");
imgList.appendChild(list);
for(var i = 0; i < files.length; i++) {
var li = document.createElement("li"); 
list.appendChild(li);

var img = document.createElement("img");
img.src = window.URL.createObjectURL(files[i]);
img.height = 60;
img.width = 60;
img.onload = function() {
window.URL.revokeObjectURL(this.src);
}
li.appendChild(img);
var info = document.createElement("span");
info.innerHTML = files[i].name + ":" + files[i].size + " bytes";
li.appendChild(info);
}
}, false);

fileSelect.addEventListener("click", function(e) {
input.click(); 
e.preventDefault();
}, false);

由于File对象继承自Blob,所以我们可以很方便的利用File对象加载本地系统图片文件,并通过createObjectURL生成一个URL并加以显示。

推荐教程:js教程

热心网友 时间:2022-04-07 07:25

可以合成一个大的Blob,再放到src上进行播放。

var theBigBlob = new Blob(blobsArr, {
type: "video/mp4"
});
document.getElementById("re-video").src = URL.createObjectURL(blob);

另外,请问你知道怎么只取一段blob吗,这个blob数组只有从前面开始取才能播放,单个的好像不能播放,我想只取后面几个连续的一部分

热心网友 时间:2022-04-07 08:43

这个只能用集合来实现。
在JavaScript中,常用Array来存储和操作对象:

Array:
新建:var ary = new Array(); 或 var ary = [];
增加:ary.push(value);
删除:delete ary[n];
遍历:for ( var i=0 ; i < ary.length ; ++i ) ary[i];
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我用耳机玩爱唱久久怎么唱出来的不响? 电脑ktv点歌软件有哪些电脑用什么点歌软件比较好 更换变速箱油后,汽车刹车和起步时底盘常有嘎啦嘎啦的异响是什么原因... 格兰仕空调口碑怎么样 格兰仕空调的优缺点有哪些? 格兰仕空调怎么样?质量好吗? 什么是PNC金融服务集团 挖出蛇是好事还是坏事? 微信换行怎么换到下一行 微信如何将自己的位置定位发绐别人 做一名导游需要具备什么条件? 英语中,here it is 和 here you are 的区别。 什么是世界上最早的职业导游员 Here it is. 的中文意思 hereitis英语怎么读 Here it is中文是什么意思 &quot;Here it is&quot;是什么? Here it is.的翻译 请问一下 英语 here is it 和 here it is 都分别是什么意思 Here itis。翻译 Here it is 是什么意思 here it is的中文是什么 解锁密码忘记了怎么办 制造1斤牛肉干,需要多少斤鲜牛肉?就按照北方普通的黄牛来说。 Here it is中文意思是什么 解锁密码忘记了,怎么办 here it is是什么意思 Here it is的中文 Here it is是什么意思? 蝙蝠app 忘记解锁密码 如何找回? 附近陌遇交友这个软件可靠吗?- 问一问 交友网站遇到的人到底有没有靠谱的 我就艹 陌遇交友怎么找回密码? 签定房屋买卖合同有效期多久 有没有上交友 快缘交友网靠普么 有人有悉尼的交友群吗 有没有愿意交友的 好丽友 房屋买卖合同多久自动失效 有谁看得上处cp交友 私人房屋买卖合同有效期多长 买卖合同有效期是多久 买卖合同是否有有效期限 房屋买卖合同的有效期多少年 军队文职人员应该具备哪些素质,或者说思想品格? 买100万第三责任险,交强,车船,多年无出险,需多少保费? 部队文职人员需要参加哪些军队工作? 应届大学生如何进入部队工作,成为一名文职干部?要求及途径。 同志视频聊天室的聊天室帮助 盘点同性恋视频在线看,【在线观看】免费百度云资源