繁体   English   中英

将 base64 转换为二进制文件并将其附加到 NodeJs 中的 formdata

[英]Converting base64 to binary file and attach it to formdata in NodeJs

如题,

我在 NextJS API 上编写了以下代码,用于在 canvas 中相应地编辑图像(为此使用节点画布),然后将其发送到另一个 API 进行进一步处理。

/* At sample.js in NextJS API */
import axios from 'axios';
import { loadImage } from 'canvas';
import FormData from 'form-data';

export default (req, res) => {
    const { source } = req.body;

    /* Something in here */

    loadImage(source).then(async image => {
    let cvs = createCanvas(),
        ctx = cvs.getContext('2d'),
        iWidth = image.naturalWidth,
        iHeight = image.naturalHeight;

    /* Some edit happening here to image */

      ctx.drawImage(
        image,
        0,
        0,
        iWidth,
        iHeight,
        0,
        0,
        w,
        h
      );

      let resizedb64 = cvs.toDataURL();
      let trimmedB64 = resizedb64.replace(/^data:image\/[a-z]+;base64,/, '');

      const fd = new FormData();
      fd.append('file', trimmedb64);

      const opts = {
        method: 'POST',
        url: pathToAnotherAPIHere,
        headers: fd.getHeaders(),
        data: fd
      };

      let promise = await axios(opts); 
  });
}

因此,如果目标 API 接受 base64 图像,则上述方法可以工作。但是如果目标 API 只接受二进制文件呢? 有没有办法将 base64 转换为二进制文件? 根据我的阅读,在 NodeJs 中完成此操作的唯一方法是首先使用 fs 将 base64 作为文件写入,然后再以二进制形式再次读取文件,但这对我来说似乎很麻烦,而且我不完全理解这样做的必要性.

谢谢

不要使用节点画布toBuffer()方法将数据 URL、go 直接转换为缓冲区

然后您可以直接将此缓冲区表单数据一起使用。

const buf = canvas.toBuffer();
fd.append('file', buf);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM