该文件显示为ok,但是Photos表示它是不受支持的格式。该文件似乎也比我预期的要小得多(16kb)。
router.post('/image/upload/gamethumb',
(req, res) => {
const destination = keys.imageLocation + "cards/";
console.log(req.body.image);
fs.writeFile(destination + req.query.title + ".png", req.body.image, 'base64',
() => {res.json({image: 'Uploaded'});
}
)
});
req.body.image的开始是:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA ...
,如果我将其粘贴到chrome中,则渲染效果很好。
我在做什么错了?
答案 0 :(得分:1)
问题在于req.body.image
包含一个数据URL ,而不仅仅是图像主体。 base64图像数据在逗号后开始。您当前的代码意外地对数据URL标头(data:image/png
等)进行了编码,就好像它是图像的一部分一样,而不是。
简单修复:
const base64Data = req.body.image.split('base64,')[1];
fs.writeFile(destination + req.query.title + ".png", base64Data, 'base64', ...);
(此代码假定传入的图像始终正确;如果需要,您可以添加一些其他逻辑以确保前缀实际上是data:image/png;base64,
等。)
答案 1 :(得分:1)
req.body.image
字符串不是真实图像。
让我们删除标题,然后将图像字符串作为图像保存到文件中
let base64Image = base64String.split(';base64,').pop();
fs.writeFile(req.query.title + ".png", base64Image, {encoding: 'base64'}, (err) => {
if (err) {
console.log(err);
return;
}
console.log('File created');
});