将base64图片以FormData格式上传到服务器(个人笔记)

  1. 将base64格式的图片处理为Blob对象。
// base64 转为Blob
function base64ToBlob(base64Data) {
  const dataArr = base64Data.split(','); // 根据,来分隔
  // 获取文件类型。使用正则捕获 image/jpeg
  const imageType = dataArr[0].match(/:(.*?);/)[1]; 
  // 使用atob() 将base64 转为文本文件
  const textData = window.atob(dataArr[1]); 
  // 创建一个二进制数据缓冲区,可以理解为一个数组
  const arrayBuffer = new ArrayBuffer(textData.length); 
  // 创建一个类型化数组对象,可以理解为上面的数组的成员,给这个对象赋值就会放到上面的数组中。
  const uint8Array = new Uint8Array(arrayBuffer);
  for (let i = 0; i < textData.length; i++) {
    uint8Array[i] = textData.charCodeAt(i); // 将文本文件转为UTF-16的ASCII, 放到类型化数组对象中
  }
  // 返回两个值,一个Blob对象,一个图片格式(如jpeg)
  return [new Blob([arrayBuffer], {type: imageType}), imageType.slice(6)]; 
}
  1. 将Blob对象添加到formData对象中。
// 转为formData
function toFormData(base64Data) {
  const [imageBlob, imageType] = base64ToBlob(base64Data); // 获取处理好的Blob 和文件类型
  const formData = new FormData();
  formData.append('file', imageBlob, `${Date.now()}.${imageType}`); // 添加到表单,传入文件名
  return formData;
}
  1. http请求头设置为context-type: multipart/form-data上送到文件服务器。
// 上传到照片服务器
export default function upload(base64Data) {
    const formData = toFormData(base64Data);
    return new Promise((resolve, reject) => {
        httpRequest(formData).then((res: any) => {
          resolve(res.data)
        }).catch((err) => {
            reject(err);
        });
    });
}

原文链接:https://blog.csdn.net/yuan0209/article/details/135423698

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容