iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何在HTML5中使用Blob对象
  • 418
分享到

如何在HTML5中使用Blob对象

2023-06-09 10:06:48 418人浏览 泡泡鱼
摘要

这篇文章将为大家详细讲解有关如何在HTML5中使用Blob对象,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。html有什么特点1、简易性:超级文本标记语言版本升级采用超集方式,从而更加灵活方

这篇文章将为大家详细讲解有关如何在HTML5中使用Blob对象,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

html有什么特点

1、简易性:超级文本标记语言版本升级采用超集方式,从而更加灵活方便,适合初学前端开发者使用。2、可扩展性:超级文本标记语言的广泛应用带来了加强功能,增加标识符等要求,超级文本标记语言采取子类元素的方式,为系统扩展带来保证。 3、平台无关性:超级文本标记语言能够在广泛的平台上使用,这也是万维网盛行的一个原因。4、通用性:HTML是网络的通用语言,它允许网页制作人建立文本与图片相结合的复杂页面,这些页面可以被网上任何其他人浏览到,无论使用的是什么类型的电脑或浏览器。

Blob对象

一直以来,js都没有比较好的可以直接处理二进制的方法。而Blob的存在,允许我们可以通过JS直接操作二进制数据。

一个Blob对象就是一个包含有只读原始数据的类文件对象。Blob对象中的数据并不一定得是javascript中的原生形式。File接口基于Blob,继承了Blob的功能,并且扩展支持了用户计算机上的本地文件。

Blob对象可以看做是存放二进制数据的容器,此外还可以通过Blob设置二进制数据的MIME类型。

创建Blob

通过构造函数

var blob = new Blob(dataArr:Array<any>, opt:{type:string});

dataArray:数组,包含了要添加到Blob对象中的数据,数据可以是任意多个ArrayBuffer,ArrayBufferView, Blob,或者 DOMString对象。

opt:对象,用于设置Blob对象的属性(如:MIME类型)

创建一个装填DOMString对象的Blob对象

如何在HTML5中使用Blob对象

创建一个装填ArrayBuffer对象的Blob对象

如何在HTML5中使用Blob对象

创建一个装填ArrayBufferView对象的Blob对象(ArrayBufferView可基于ArrayBuffer创建,返回值是一个类数组。如下:创建一个8字节的ArrayBuffer,在其上创建一个每个数组元素为2字节的“视图”)

如何在HTML5中使用Blob对象

通过Blob.slice()

此方法返回一个新的Blob对象,包含了原Blob对象中指定范围内的数据

Blob.slice(start:number, end:number, contentType:string)

start:开始索引,默认为0
end:截取结束索引(不包括end)
contentType:新Blob的MIME类型,默认为空字符串

如何在HTML5中使用Blob对象

var canvas = document.getElementById("canvas");canvas.toBlob(function(blob){    console.log(blob);});

如何在HTML5中使用Blob对象

应用场景

前面提到,File接口基于Blob,继承了Blob的功能并进行了扩展,故我们可以像使用Blob一样使用File对象。

分片上传

通过Blob.slice方法,可以将大文件分片,轮循向后台提交各文件片段,即可实现文件的分片上传。
分片上传逻辑如下:

  • 获取要上传文件的File对象,根据chunk(每片大小)对文件进行分片

  • 通过post方法轮循上传每片文件,其中url中拼接querystring用于描述当前上传的文件信息;post body中存放本次要上传的二进制数据片段

  • 接口每次返回offset,用于执行下次上传

下面是分片上传的简单实现:

initUpload();//初始化上传function initUpload() {    var chunk = 100 * 1024;   //每片大小    var input = document.getElementById("file");    //input file    input.onchange = function (e) {        var file = this.files[0];        var query = {};        var chunks = [];        if (!!file) {            var start = 0;            //文件分片            for (var i = 0; i < Math.ceil(file.size / chunk); i++) {                var end = start + chunk;                chunks[i] = file.slice(start , end);                start = end;            }                        // 采用post方法上传文件            // url query上拼接以下参数,用于记录上传偏移            // post body中存放本次要上传的二进制数据            query = {                fileSize: file.size,                dataSize: chunk,                nextOffset: 0            }            upload(chunks, query, successPerUpload);        }    }}// 执行上传function upload(chunks, query, cb) {    var queryStr = Object.getOwnPropertyNames(query).map(key => {        return key + "=" + query[key];    }).join("&");    var xhr = new XMLHttpRequest();    xhr.open("POST", "http://xxxx/opload?" + queryStr);    xhr.overrideMimeType("application/octet-stream");        //获取post body中二进制数据    var index = Math.floor(query.nextOffset / query.dataSize);    getFileBinary(chunks[index], function (binary) {        if (xhr.sendAsBinary) {            xhr.sendAsBinary(binary);        } else {            xhr.send(binary);        }    });    xhr.onreadystatechange = function (e) {        if (xhr.readyState === 4) {            if (xhr.status === 200) {                var resp = JSON.parse(xhr.responseText);                // 接口返回nextoffset                // resp = {                //     isFinish:false,                //     offset:100*1024                // }                if (typeof cb === "function") {                    cb.call(this, resp, chunks, query)                }            }        }    }}// 每片上传成功后执行function successPerUpload(resp, chunks, query) {    if (resp.isFinish === true) {        alert("上传成功");    } else {        //未上传完毕        query.offset = resp.offset;        upload(chunks, query, successPerUpload);    }}// 获取文件二进制数据function getFileBinary(file, cb) {    var reader = new FileReader();    reader.readAsArrayBuffer(file);    reader.onload = function (e) {        if (typeof cb === "function") {            cb.call(this, this.result);        }    }}

以上是文件分片上传前端的简单实现,当然,此功能还可以更加完善,如后台需要对合并后的文件大小进行校验;或者前端加密文件,全部上传完毕后后端解密校验等,此处不做赘述。

通过url下载文件

window.URL对象可以为Blob对象生成一个网络地址,结合a标签的download属性,可以实现点击url下载文件
实现如下:

createDownload("download.txt","download file");function createDownload(fileName, content){    var blob = new Blob([content]);    var link = document.createElement("a");    link.innerHTML = fileName;    link.download = fileName;    link.href = URL.createObjectURL(blob);    document.getElementsByTagName("body")[0].appendChild(link);}

执行后页面上会生成此Blob对象的地址,点击后可下载:

如何在HTML5中使用Blob对象

查看下载结果:

如何在HTML5中使用Blob对象

通过url显示图片

我们知道,img的src属性及background的url属性,都可以通过接收图片的网络地址或base64来显示图片,同样的,我们也可以把图片转化为Blob对象,生成URL(URL.createObjectURL(blob)),来显示图片。

如何在HTML5中使用Blob对象

关于如何在HTML5中使用Blob对象就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 如何在HTML5中使用Blob对象

本文链接: https://www.lsjlt.com/news/255724.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何在HTML5中使用Blob对象
    这篇文章将为大家详细讲解有关如何在HTML5中使用Blob对象,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。html有什么特点1、简易性:超级文本标记语言版本升级采用超集方式,从而更加灵活方...
    99+
    2023-06-09
  • HTML5中的Blob对象如何使用
    本篇内容主要讲解“HTML5中的Blob对象如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5中的Blob对象如何使用”吧! HTML5中的Bl...
    99+
    2024-04-02
  • HTML5中的Blob对象的使用方法
    这篇文章将为大家详细讲解有关HTML5中的Blob对象的使用方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。HTML5中的Blob对象和MYSQL中的BL...
    99+
    2024-04-02
  • 如何在HTML5中使用json对象
    这期内容当中小编将会给大家带来有关如何在HTML5中使用json对象,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。具体代码如下所示:<!DOCTYPE html><html&g...
    99+
    2023-06-09
  • C#中如何存储BLOB对象
    本篇文章给大家分享的是有关C#中如何存储BLOB对象,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C#存储BLOB对象检索和C#存储BLOB对象是一个很简单的过程;相反的过程,...
    99+
    2023-06-17
  • 如何使用HTML5的localStorage对象
    这篇文章主要讲解了“如何使用HTML5的localStorage对象”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用HTML5的localStorag...
    99+
    2024-04-02
  • 如何在VBScript中使用对象
    这篇文章主要介绍“如何在VBScript中使用对象”,在日常操作中,相信很多人在如何在VBScript中使用对象问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何在VBScript中使用对象”的疑惑有所帮助!...
    99+
    2023-06-09
  • 如何在Django中使用Q()对象
    这期内容当中小编将会给大家带来有关如何在Django中使用Q()对象,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。问题一般我们在Django程序中查询数据库操作都是在QuerySet里进行进行,例如下面代...
    99+
    2023-06-04
  • 如何在VBS中使用Err对象
    如何在VBS中使用Err对象?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Err对象是一个具有全局范围的内部对象,含有关于错误的所有信息。On Error Resume nex...
    99+
    2023-06-08
  • 如何在java中使用对象池
    这篇文章将为大家详细讲解有关如何在java中使用对象池,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、说明(1)创建工厂类:通过继承BaseGenericObjectPool或者实现基础接...
    99+
    2023-06-15
  • PHP 对象在 JavaScript IDE 中如何使用?
    随着互联网技术的不断发展,前端开发也越来越复杂。JavaScript IDE 已经成为了前端开发人员必备的工具之一。然而,对于 PHP 开发人员来说,如何在 JavaScript IDE 中使用 PHP 对象是一个很大的挑战。在本文中,我...
    99+
    2023-10-29
    对象 javascript ide
  • 如何在 ASP 中使用 http shell 对象?
    ASP(Active Server Pages)是一种服务器端脚本语言,它可以用来构建动态网站。在 ASP 中,我们可以使用 HTTP Shell 对象来执行外部程序或脚本文件,这为我们提供了很多方便。 本文将介绍如何在 ASP 中使用 H...
    99+
    2023-06-02
    http shell 对象
  • 如何在 PHP 中使用类和对象
    类和对象是 php 中用于封装数据和行为的基本构建块。可以通过 class 关键字定义一个类,使用 new 关键字创建对象。通过箭头操作符 (->) 访问和设置对象属性。方法使用 ...
    99+
    2024-05-03
    对象
  • 如何在Go Spring开发中使用对象?
    Go Spring是一个非常流行的Web开发框架,它提供了丰富的功能和灵活的架构,使得开发者能够快速构建高效的Web应用程序。在Go Spring开发中,使用对象是非常重要的一个方面。在本文中,我们将介绍如何在Go Spring开发中使用对...
    99+
    2023-07-26
    spring 开发技术 对象
  • Python和Git在Windows中如何使用对象?
    在当今时代,Python和Git是两个非常流行的工具,它们可以被用于各种不同的应用场景中。Python是一种高级编程语言,可以用于开发各种类型的应用程序,而Git是一种分布式版本控制系统,可以用于跟踪和管理代码的修改。 在本文中,我们将介...
    99+
    2023-11-13
    git windows 对象
  • 如何在ASP.NET中使用NumPy响应对象?
    ASP.NET是一个非常强大的Web开发框架,它的优点在于它的灵活性、可扩展性和可维护性。在ASP.NET开发中,NumPy是一个非常流行的科学计算库,它提供了对数组、矩阵、线性代数、傅里叶变换、随机数生成等方面的支持。在本文中,我们将介绍...
    99+
    2023-10-27
    numy 响应 对象
  • 如何在ASP对象中使用Unix函数?
    ASP (Active Server Pages) 是一种基于服务器端的脚本语言,常用于开发 Web 应用程序。在 ASP 中,我们可以使用各种函数来处理数据和执行特定的操作。其中,Unix 函数是一类非常有用的函数,它们可以让我们在 AS...
    99+
    2023-10-27
    对象 unix 函数
  • 如何在 Laravel 中使用 Java 和 JavaScript 对象?
    Laravel 是一种流行的 PHP 框架,它提供了一种优雅的方式来构建 Web 应用程序。在开发过程中,您可能需要使用其他编程语言编写的对象,例如 Java 和 JavaScript。本文将介绍如何在 Laravel 中使用 Java 和...
    99+
    2023-09-22
    javascript 对象 laravel
  • Java对象如何在HTTP索引中使用?
    Java是一种非常流行的编程语言,其面向对象的特性使其成为开发人员的首选。随着Web技术的不断发展,HTTP协议已经成为了互联网上最为常用的协议之一。那么,Java对象如何在HTTP索引中使用呢?本文将为您介绍Java对象在HTTP索引中的...
    99+
    2023-09-13
    对象 http 索引
  • 如何在Java框架中使用Unix对象?
    Java是一种使用广泛的编程语言,拥有强大的功能和丰富的开发库。在Java中,使用Unix对象可以为我们的开发带来便利。本文将介绍如何在Java框架中使用Unix对象,以及如何使用Unix对象来处理文件和目录。同时,我们还将提供一些示例代码...
    99+
    2023-11-09
    框架 unix 对象
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作