利用Blob进行文件上传的完整步骤
BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。下面这篇文章主要给大家介绍了关于利用Blob进行文件上传的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
转载地址:https://www.jb51.net/article/144934.htm
Blob
Blob,Binary Large Object的缩写,二进制类型的大对象,代表不可改变的原始数据
在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。
Blob基本用法
Blob对象
Blob对象指的是字节序列,并且具有size属性,是字节序列中的字节总数,和一个type属性,它是小写的ASCII编码的字符串表示的媒体类型字节序列。
size:以字节数返回字节序列的大小。获取时,符合要求的用户代理必须返回一个FileReader或一个FileReaderSync对象可以读取的总字节数,如果Blob没有要读取的字节,则返回0 。
type:小写的ASCII编码字符串表示媒体类型Blob。在获取时,用户代理必须Blob以小写形式返回a类型的ASCII编码字符串,这样当它转换为字节序列时,它是可解析的MIME类型,或者是空字符串(0字节)如果是类型无法确定。
构造函数
创建blob对象本质上和创建一个其他对象的方式是一样的,都是使用Blob() 的构造函数来进行创建。 构造函数接受两个参数:
第一个参数为一个数据序列,格式可以是ArrayBuffer, ArrayBufferView, Blob, DOMString
第二个参数是一个包含以下两个属性的对象
- type: MIME的类型,
- endings: 决定第一个参数的数据格式。默认值为"transparent",用于指定包含行结束符n的字符串如何被写入。 它是以下两个值中的一个: "native",表示行结束符会被更改为适合宿主操作系统文件系统的换行符; "transparent",表示会保持blob中保存的结束符不变。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
slice方法
Blob对象有一个slice方法,返回一个新的 Blob对象,包含了源 Blob对象中指定范围内的数据。
?
1 |
|
start: 可选,代表 Blob 里的下标,表示第一个会被会被拷贝进新的 Blob 的字节的起始位置。如果传入的是一个负数,那么这个偏移量将会从数据的末尾从后到前开始计算。
end: 可选,代表的是 Blob 的一个下标,这个下标-1的对应的字节将会是被拷贝进新的Blob 的最后一个字节。如果你传入了一个负数,那么这个偏移量将会从数据的末尾从后到前开始计算。
contentType: 可选,给新的 Blob 赋予一个新的文档类型。这将会把它的 type 属性设为被传入的值。它的默认值是一个空的字符串。
?
1 2 3 4 5 6 |
|
slice用于文件分片上传
- 分片与并发结合,将一个大文件分割成多块,并发上传,极大地提高大文件的上传速度。
- 当网络问题导致传输错误时,只需要重传出错分片,而不是整个文件。另外分片传输能够更加实时的跟踪上传进度。
分片上传逻辑如下:
获取要上传文件的File对象,根据chunk(每片大小)对文件进行分片
通过post方法轮循上传每片文件,其中url中拼接querystring用于描述当前上传的文件信息;post body中存放本次要上传的二进制数据片段
接口每次返回offset,用于执行下次上传
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
|
Blob URL
blob协议的url使用时就像平时使用的url一样,可以作为图片请求地址,也可以作为文件请求地址。格式:
blob:http://XXX
- URL.createObjectURL(blob) 创建链接
- URL.revokeObjectURL(url)
下面是一个下载文件的示例,直接调用即可实现文件下载
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
在从后台获取的数据接口中把返回类型设置为blob
?
1 2 |
|
Blob URL和Data URL的区别
Blob URL
Data URL
- Blob URL的长度一般比较短,但Data URL因为直接存储图片base64编码后的数据,往往很长,如上图所示,浏览器在显示Data URL时使用了省略号(…)。当显式大图片时,使用Blob URL能获取更好的可能性。
- Blob URL可以方便的使用XMLHttpRequest获取源数据,比如设置XMLHttpRequest返回的数据类型为blob
- Blob URL 只能在当前应用内部使用,把Blob URL复制到浏览器的地址栏中,是无法获取数据的。Data URL相比之下,就有很好的移植性,可以在任意浏览器中使用。
利用Blob进行文件上传的完整步骤相关推荐
- 利用MultipartFile实现文件上传
利用MultipartFile实现文件上传 在java中上传文件似乎总有点麻烦,没.net那么简单,记得最开始的时候用smartUpload实现文件上传,最近在工作中使用spring的Multipar ...
- java利用dropzone多文件上传
DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库, 它是轻量级的,不依赖任何其他类库(如JQuery)并且高度可定制.文档官网https://www.dropzonejs.com/ ...
- Spring Boot 利用WebUploader进行文件上传
Web Uploader WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势 ...
- PlayFrameWork实现文件上传,完整流程
1.页面内容 <!DOCTYPE html> <html><head><title>index.html</title><meta n ...
- Java 利用SWFUpload多文件上传 session 为空失效,不能验证的问题
我们都知道普通的文件上传是通过表单进行文件上传的,还不能达到异步上传的目的.通过使用某些技术手段,比如jquery form.js可以达到异步上传的目的,但最重要的问题在于,它不能够进行多个文件的上传 ...
- Koa2利用koa-body实现文件上传需要注意的问题
koa-body是一款为实现文件上传的中间件. 本文主要就利用该插件实现上传时遇到的问题进行些整理. 1 ctx.request.files.file ---------->终端提示undef ...
- selenium autoit java_selenium+java利用AutoIT实现文件上传
1.AutoIT介绍 AutoIT是一个类似脚本语言的软件,利用此软件我们可以方便的实现模拟键盘.鼠标.窗口等操作,实现自动化. 2.实现原理 利用AutoIT编写合适的脚本,然后将脚本编译成可执行文 ...
- php ajaxfileupload.js 使用,ajaxfileupload.js实现文件上传(附步骤代码)
这次给大家带来ajaxfileupload.js实现文件上传(附步骤代码),ajaxfileupload.js实现文件上传的注意事项有哪些,下面就是实战案例,一起来看一下. AjaxUpLoad.js ...
- JSP中文件上传的关键步骤
1.在JSP文件中使用page指令导入Commons-FileUpload组件所需的类. 2.判断请求信息中的内容是否是multipart类型,如果是则进行处理. 3.通过FileItemFactor ...
- Angular15 利用ng2-file-upload实现文件上传
待更新 转载于:https://www.cnblogs.com/NeverCtrl-C/p/8279246.html
最新文章
- 【FFmpeg】详解FFmpeg解封装、解码流程
- 灵异事件 !同一个代码在code::blocks和Dev上面运行结果不一样!(一番分析后找到原因!)
- 【POJ 3273】 Monthly Expense (二分)
- ROS探索总结(十三)(十四)(十五)——导航与定位框架 move_base(路径规划) amcl(导航与定位)
- OPENSSL的基础使用
- 分数怎么在计算机上关,电脑如何在注册表上关闭AutoRun功能
- SpringMVC学习记录二——非注解和注解的处理器映射器和适配器
- GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟。...
- Spring Boot-------JPA——EntityManager构建通用DAO
- 为了离去的纪念——google
- python数据建模工具_python数据分析工具——Pandas、StatsModels、Scikit-Learn
- python读取二进制文件_Python读写二进制文件
- 荣耀电脑,win11增加pin码登录选项后:电脑出现问题,你的PIN不可用。请单击以重新设置
- ARM和MIPS架构
- 一款优秀的IT资产管理系统-Snipe-IT 安装及用户手册中文版(一安装部署篇)
- 电脑硬盘中毒了怎么办?u盘中毒数据丢失怎么恢复
- python 视频加字幕_Python追风者之视频编辑moviepy
- 创新驱动看广东,上云本领看云宏!全国30多家网媒齐聚云宏参访!
- 《熟练掌握OpenCV----实用计算机视觉工程案例》第5章 车牌号码识别
- 浮生事,何必念念不忘