javascript - JS中Base64转图片文件

标签 javascript node.js typescript

我正在处理一个项目,我必须将图像作为表单数据与其他文本字段一起上传。一开始我的文件是 Base64 字符串,然后在将它上传到服务器之前将它转换成一个文件。

const data = await fetch(base64String);
const blob = await data.blob();
const file = await new File([blob], 'avatar', { type: 'image/png' });

在将它上传到服务器之前,我在客户端记录了 base64String。然后我将 file 作为文件上传到服务器。在将它保存到 MongoDB 之前,当我在服务器端再次将其记录为 base64 字符串时,我发现我的字符串与以前不同。我觉得在客户端将 base64 转换为文件时我做错了什么。请帮帮我。

最佳答案

我已经解决了我的问题。当我从我的计算机输入图像文件时,我得到一个 base64 字符串,如下所示 -

dataimage/jpegbase64/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA...

但是,当我将它转换回文件时,它需要一个如下所示的字符串 -

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA....

所以,基本上,我不得不相应地 trim 字符串以匹配预期的格式,并在 this answer 之后编写了一个 base64 到文件的转换函数。 . 这是我将 base64 字符串转换为图像文件的函数

export function getFileFromBase64(string64:string, fileName:string) {
  const trimmedString = string64.replace('dataimage/jpegbase64', '');
  const imageContent = atob(trimmedString);
  const buffer = new ArrayBuffer(imageContent.length);
  const view = new Uint8Array(buffer);

  for (let n = 0; n < imageContent.length; n++) {
    view[n] = imageContent.charCodeAt(n);
  }
  const type = 'image/jpeg';
  const blob = new Blob([buffer], { type });
  return new File([blob], fileName, { lastModified: new Date().getTime(), type });
}

关于javascript - JS中Base64转图片文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68248551/

相关文章:

javascript - 使用 Math.random() 生成均匀分布

reactjs - 带有 yup 验证的对象或字符串类型有条件

variables - TypeScript 'let' 变量和异步调用

javascript - 元素内容更改的问题 - 我怎样才能获得新值?

javascript - Angular 2 中的时间倒计时

javascript - 使用 Jest 模拟 Es6 类

node.js - 我的 EJS include 导致我的 Express 应用程序出现错误。

javascript - typescript 中的静态类

Javascript用中间值填充数组

javascript - Google Apps 脚本 : adding a label to an email sent