![](/img/trans.png)
[英]Reading a local binary file in javascript and converting to base64
[英]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.