将html字符串中的base64图片转换成file并上传

这篇具有很好参考价值的文章主要介绍了将html字符串中的base64图片转换成file并上传。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目的
  • 解决富文本编辑器中复制粘贴的图片 base64 字符串过长导致无法存储到数据库的问题
思路
  • 通过正则 获取html字符串中里面的所有图片 base64 数组 然后每个图片base64 转成file
  • 使用上传文件的函数 上传到服务器上.
  • 将上传后获取到的图片访问url 替换成 数据里面的 img 的 src.
代码
/**
 * 将html中的 图片base64 通过调上传文件接口转换成图片url
 * */

/**
上传文件
**/
export function uploadFile(params) {
	let url = `/upload`; // 
	const formData = new FormData();
	for (let item in params) {
		formData.append(item, params[item]);
	}
	return fetch(url, {
		method: 'POST',
		headers: {
			Accept: '*/*',
		},
		body: formData,
	})
		.then((res) => {
			return res.json();
		})
		.then((responseData) => {
			if(responseData && typeof responseData === 'object' && responseData.url){
				return responseData;
			}
			if (responseData && responseData.data) {
				return responseData.data;
			} else {
				throw new Error('文件上传失败');
			}
		})
		.catch(() => {
			throw new Error('上传文件失败');
		});
}

// base64转url
export default function base64ImgToUrl(htmlContent = ''){
	return new Promise((resolve, reject) => {
		let splitContent = getImages(htmlContent);  // 获取所有的图片 的 base64 src
		let res = [];
		for(let item of splitContent){
			if(item && item.includes(';base64,')){
				const file = {
					base64: item,
				};
				file.file = base64toFile(item, new Date().getTime()); // 将图片转换成file
				res.push(file);
			}
		} // 任务列表

		async function DoTaskByForOf() {
			for (let item of res) { // 按顺序执行
					const fileResponse = await uploadFile({file:item.file}); // 上传文件到服务器
					if(fileResponse && fileResponse.url){
						item.url = fileResponse.url;
					}
			}
			return res;
		}
		DoTaskByForOf().then((r) => {
			resolve(r);
		}); // 按顺序执行
	})
}

/**
 * 使用正则表达式从HTML字符串中获取所有图像src
 * */
export function getImages(html) {
	const regExp = /<img[^>]+src=['"]([^'"]+)['"]+/g;
	const result = [];
	let temp;
	while ((temp = regExp.exec(html)) != null) {
		result.push(temp[1]);
	}
	return result;
}


/**
 * 把base64图片转为文件对象
 * 第一个参数dataUrl是一个base64的字符串。第二个参数是文件名可以随意命名
 */
export function base64toFile(dataUrl = '', filename = 'file') {
	let arr = dataUrl.split(',');
	let mime = arr[0].match(/:(.*?);/)[1];
	// suffix是该文件的后缀
	let suffix = mime.split('/')[1];
	// atob 对经过 base-64 编码的字符串进行解码
	let bstr = atob(arr[1]);
	// n 是解码后的长度
	let n = bstr.length;
	// Uint8Array 数组类型表示一个 8 位无符号整型数组 初始值都是 数子0
	let u8arr = new Uint8Array(n);
	// charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数
	while (n--) {
		u8arr[n] = bstr.charCodeAt(n);
	}
	// new File返回File对象 第一个参数是 ArraryBuffer 或 Bolb 或Arrary 第二个参数是文件名
	// 第三个参数是 要放到文件中的内容的 MIME 类型
	return new File([u8arr], `${filename}.${suffix}`, {
		type: mime,
	});
}

文章来源地址https://www.toymoban.com/news/detail-817856.html

到了这里,关于将html字符串中的base64图片转换成file并上传的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • postman获取验证码图片(base64字符串格式)

    在 Tests 里编写脚本 然后,在响应体的 Visualize 里查看

    2024年02月12日
    浏览(38)
  • 图片文件和 Base64 字符串互转(Java 实现)

      项目中,有些场景下,客户端需要将本地图片传输到服务方存储,此时客户端可以将图片文件转为 Base64 字符串传输到服务方,服务方收到后再将 Base64 字符串还原为图片。以下是一些图片文件和 Base64 字符串互转的工具类,以及校验图片大小的工具。 一、依赖包 二、工

    2024年02月04日
    浏览(45)
  • uniapp 将base64字符串保存为图片、Word、Excel、音频、视频等文件

     uniapp 将base64字符串保存为图片、Word、Excel、音频、视频等文件 index.vue,复制运行此代码看效果,支持Android、iOS 参考文档: 1、uniapp中拿到base64转blob对象,或base64转bytes字节数组,io操作写入字节流文件bytes 2、录音文件与Base64编码相互转换的方法 3、关于base64保存为文件 4、

    2024年02月11日
    浏览(45)
  • PDF处理控件Aspose.PDF功能演示:使用Java将Base64字符串转换为PDF/JPG/PNG图像

    Aspose.PDF  是一款高级PDF处理API,可以在跨平台应用程序中轻松生成,修改,转换,呈现,保护和打印文档。无需使用Adobe Acrobat。此外,API提供压缩选项,表创建和处理,图形和图像功能,广泛的超链接功能,图章和水印任务,扩展的安全控件和自定义字体处理。 Aspose API支持

    2024年02月04日
    浏览(59)
  • Java Base64字符串与String字符串互转方法

    在使用String转Base64和Base64转String上有点小问题,特此记录。 结果: 也是跟上面差不多的思路,将Base64转为byte数组,再转为String

    2024年02月15日
    浏览(38)
  • 解决因base64字符串过长,报500的问题

    提示:后端用nodejs的express,前端是vue 当上传的图片小(base64字符串长度小)时,上传成功 当上传的图片大(base64字符串长度过长)时,上传失败,接口报500,服务器也报了一大堆的错误。 如果直接把base64字符串复制到数据库发现报错,提示数据太长,很明显是因为base64字符

    2024年02月11日
    浏览(36)
  • [译]JavaScript中Base64编码字符串的细节

    本文作者为 360 奇舞团前端开发工程师 本文为翻译 原文标题:The nuances of base64 encoding strings in JavaScript 原文作者:Matt Joseph 原文链接:https://web.dev/articles/base64-encoding   Base64编码和解码是一种常见的将二进制内容转换为适合Web的文本的形式。它通常用于data URLs,比如内嵌图片

    2024年02月05日
    浏览(38)
  • 在HTTP请求中安全传输base64编码的字符串

    base64 是一种常见的的编码格式,它可以把二进制数据编码成一个由大小写英文字母( a-zA-Z )、阿拉伯数字( 0-9 ),以及三个特殊字符 + 、 / 、 = 组成的字符串。 但是在URL传输中, + 、 / 、 = 这三个特殊字符是保留字符(或者叫不安全字符),如果将编码后的base64字符串直

    2024年02月06日
    浏览(32)
  • [虚幻引擎] UE DTBase64 插件说明 使用蓝图对字符串或文件进行Base64加密解密

    本插件可以在虚幻引擎中使用蓝图对字符串,字节数组,文件进行Base64的加密和解密。 目录 1. 节点说明 String To Base64 Base64 To String Binary To Base64 Base64 To Binary File To Base64 Base64 To File 2. 案例演示 3. 插件下载 String To Base64 对字符串进行Base64加密,字符串会自动转换成UTF8的格式,这

    2024年02月13日
    浏览(54)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包