【JavaScript】如何转换blob数据与file文件还有url

这篇具有很好参考价值的文章主要介绍了【JavaScript】如何转换blob数据与file文件还有url。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,关于blob对象和file对象有了解多少呢,它们都是一种文件的表示形式,文件之间是可以互相转换的,顺带一提,还有经常用到的临时文件路径tempFileURL

文件类型

首先,需要先知道文件类型有哪些,我们可以通过文件名后缀判断

常见的文件类型列表

文件后缀 MIME类型 说明
txt text/plain 文本文件
htm, html text/html HTML文本
pdf application/pdf PDF文档
doc application/msword Word文档
png image/png PNG图片
jpg, jpeg mage/jpeg JPEG图片
tar application/x-tar TAR文件
gzip application/x-gzip GZIP文件

Blob对象

了解一下,Blob对象有哪些属性,这是一个存储了二进制的原始数据文件,类似与File文件对象的只读文件,是临时存放的,方便缓存和处理文件

  • 文件类型 MIME type
  • 文件内容 base64 或 blobURL

创建一个blob对象

/**
* 文本转blob对象
* @param String text 文本内容
* @param String type MIME 类型
*/
function createObjectBlob(text,type='text/plain'){
	return new Blob([text], { type });
}

可将blob对象转file对象

/**
* blob转file对象
* @param String blob 对象
* @param String filename 文件名
* @param String type MIME 类型
*/
function createObjectFile(blob,filename,type='text/plain'){
	return new File([blob],filename,{ type });
}

可将blob对象转换临时文件l路径url

/**
* blob转url临时访问地址
* @param String blob 对象
*/
function createObjectURL(blob){
	return URL.createObjectURL(blob);
}

File对象

了解一下,File对象有哪些属性,我们知道,可通过选择文件上传用到的HTML标签<input type="file" />,从中可得到上传文件的File对象实例

  • 文件名 filename, 例如 readme.txt
  • 文件类型 MIME type
  • 文件内容

创建一个file对象

/**
* 文本转file对象
* @param String text 文本内容
* @param String filename 文件名
* @param String type MIME 类型
*/
function createObjectFile(text,filename,type='text/plain'){
	return new File([text],filename,{ type });
}

可将file对象转blob对象

/**
* file转blob对象
* @param String file 对象
*/
function createObjectBlob(file){
	return new Blob([file],{type:file.type});
}

将file对象转换为临时文件路径url

/**
* file转url临时访问地址
* @param String file 对象
*/
function createObjectURL(file){
	return URL.createObjectURL(file);
}

URL临时路径

了解一下,URL临时路径,还可以命名为TempFilePath,见名知意,是Blob对象的临时文件位置,用于访问文件资源

临时文件路径url可以转换为file对象

/**
* url临时访问地址转file对象
* @param { url, filename, type, success, fail } 临时地址,文件名,MIME类型,成功回调,失败回调
*/
function createObjectFile(e){
	const { url, filename } = e;
	const encode = e.encode || 'utf-8';
	const type = e.type || 'text/plain';
	let reader = new FileReader();
	reader.onloadend = () => {
		if(url.startsWith('data:') type=url.split(',')[0].match(/:(.*?);/)[1];
		let file = new File([reader.result],filename,{ type });
		e.success({ file });
	};
	if(e.fail) reader.onerror = e.fail;
	if(type.startsWith('text')) reader.readAsText(url, encode);//读取文本
	else if(type.startsWith('image')) reader.readAsDataURL(url, encode);//读出的是base64字符串 可赋值给标签img.src
	else reader.readAsArrayBuffer(url, encode);//读出的是ArrayBuffer对象
}

注意url如果是base64字符串(以data:开头)表示形式,字符串是会比较长,这可不是临时文件路径,这只是直接将文件内容转换为字符串编码,所以会看到字符串会比较长,这可不适用大文件处理哦,通常用于图标或图像文件处理和显示

临时文件路径url可以转换为blob对象

/**
* url临时访问地址转blob对象
* @param { url, success, fail } 临时地址,成功回调,失败回调
*/
function createObjectBlob(e){
	const { url } = e;
	try{
		if(url.startsWith('data:')){
			let arr = url.split(','),
				type = arr[0].match(/:(.*?);/)[1],
				bstr = atob(arr[1]),
				n = bstr.length,
				u8arr = new Uint8Array(n);
			while(n--) u8arr[n] = bstr.charCodeAt(n);
			e.success({
				blob: new Blob([u8arr], { type })
			});
		}else{
			let xhr = new XMLHttpRequest();
			xhr.responseType = 'blob';
			xhr.onload = () => e.success({
				blob: xhr.response
			});
			if(e.fail) xhr.onerror = e.fail;
			xhr.open('GET', url);
			xhr.send();
		}
	}catch(err){
		if(e.fail) e.fail(err)
	}
}

例如这样调用

createObjectBlob({
	url:'blob:http://localhost:...',
	success(res){
		const { blob } = res;
		//...
	}
})

注意临时文件路径url的表示形式

base64 例如 data:text/plain;base64,b2ZmaWNlMjAxOea/gOa0u+WvhumSpe…
blob 例如 blob:http://localhost:…

【JavaScript】如何转换blob数据与file文件还有url文章来源地址https://www.toymoban.com/news/detail-407281.html

到了这里,关于【JavaScript】如何转换blob数据与file文件还有url的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 文件流互相转换(blob转base64,二进制流)

    跟用input上传文件的获取到的差不多 用URL.createObjectURL(blob)转化后是这样

    2024年02月10日
    浏览(56)
  • JS前端读取本地上传的File文件对象内容(包括Base64、text、JSON、Blob、ArrayBuffer等类型文件)

    FileReader.readAsArrayBuffer() - Web API 接口参考 | MDN FileReader 接口提供的 readAsArrayBuffer() 方法用于启动读取指定的 Blob 或 File 内容。当读取操作完成时,readyState 变成 DONE(已完成),并触发 loadend 事件,同时 result 属性中将包含一个 ArrayBuffer 对象以表示所读取文件的数据。 https://

    2024年02月15日
    浏览(57)
  • 后端返回文件流,前端用blob转换后,下载的文件乱码或者打不开怎么解决

    1、确认接口有没有设置 responseType: “blob” 2、使用blob转换,res 是 后端返回的文件流 3、如果文件还是打不开,提示文件格式不对……,那就看看项目中有没有引用 mockJs ,有的话注释掉就可以啦

    2024年02月16日
    浏览(66)
  • 数据库取到blob对象转换成String对象

    1.用Map查询单条数据。 2.将数据强转为blob对象 3.将blob对象转成byte[] 4.将byte[] 对象转成String

    2023年04月13日
    浏览(28)
  • new Blob()详解以及blob转file

    定义: Blob() 构造函数返回一个新的 Blob 对象。blob 的内容由参数数组中给出的值的串联组成。 语法 参数 array 是一个由ArrayBuffer, ArrayBufferView, Blob, DOMString 等对象构成的 Array ,或者其他类似对象的混合体,它将会被放进 Blob。DOMStrings 会被编码为 UTF-8。 options 是一个可选的Bl

    2024年02月11日
    浏览(41)
  • 前端将base64图片转换成file文件

    1、base64转成file具体代码 文件转换过程: 2、代码解析 ​ 该方法涉及知识点较多,首先因为base64的前缀信息部分与文件内容部分是通过 , 进行连接的, data:image/***;base64(前缀信息),xxxxx(文件内容) ,所以利用 split() 方法对base64进行分割,将前缀文件信息,与文件内容分隔开。得

    2024年01月20日
    浏览(56)
  • 【Java】如何将File转换成MultipartFile

            假如你把你的后端项目部署在服务器上的时候,然后你要去读取某个路径下的文件,然后你就要提供文件的路径,然后获取到该文件对象,但是你需要将当前文件对象File转换成MultipartFile再发送http请求传递到其他服务器上,这样如何实现呢?         后端如何发

    2024年02月04日
    浏览(41)
  • 谈谈:File、Blob、FileReader、ArrayBuffer、base64

    JavaScript 提供了一些 API 来处理文件或原始文件数据,例如:File、Blob、FileReader、ArrayBuffer、base64 等。下面就来看看它们都是如何使用的,它们之间又有何区别和联系。 1. Blob Blob全称为binary large Object 即二进制大对象,他是js中的一个对象,表示原始类似文件的数据。MDN中的解

    2024年02月09日
    浏览(49)
  • 通过HTTP链接获取图片文件,并将其转换为File格式

    场景介绍: 添加时上传图片,获取图片File文件上传至接口。 编辑时,直接将img标签中src设置成http url回显图片。 编辑时,不修改图片,保存时,接口仍需要图片的File文件格式。此时如果获取图片的File文件格式是个问题。 以下步骤,针对如何将http url转化为File格式做一个说

    2024年02月04日
    浏览(60)
  • JAVA获取视频音频时长 文件大小 MultipartFileUtil和file转换

    java 获取视频时长_java获取视频时长_似夜晓星辰的博客-CSDN博客 可以转换文档也可转换视频

    2024年02月14日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包