繁体   English   中英

从 php base64 字符串解码时,Node Js 从 base64 写入文件结果错误“无效的 JPEG 结构:两个 SOF 标记”

[英]Node Js write File from base64 result error "Invalid JPEG structure : two SOF Marker" when decode from php base64 string

我有一个 Node Js,它可以检索 base64 字符串并将其保存到图像中,这是我的 Node Js 代码:

===节点JS代码===

var q = req.body;
var extention = ".jpg";
var dir = "img/customer/idcard/";

var base64Data = q.image.replace(/^data:image\/\w+;base64,/, "");

fs.unlink("../" + dir + OldGambar + extention, (err) => {
  if (err) console.log(err);
 // console.log(OldGambar + ' was deleted');
});

require("fs").writeFile("../" + dir + NewGambar + extention, base64Data, 'base64', function(err) {
  if (err) console.log(err);
});

下面是我使用 Android (JAVA) 将 Image 转换为 Base64 字符串的代码:

Bitmap image = ((BitmapDrawable) varimgIDCard.getDrawable()).getBitmap();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
Encode = Base64.encodeToString(byteArrayOutputStream.toByteArray(),Base64.DEFAULT);

而在JAVA中,一切正常,图像本身可以打开而没有任何错误

下面是我使用 PHP 将 Image 转换为 Base64 的代码:

$path = $dest.$a;
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$strimg = 'data:image/' . $type . ';base64,' . base64_encode($data);

上面的代码在创建文件时也没有问题或错误,但是当我打开文件时。 它导致错误“无效的 JPEG 结构:两个 SOF 标记”

为什么会这样? 我在 PHP 编码中做错了什么吗?

顺便说一下,这里是来自 Android (JAVA) 的 SUCCESS Base64 的结果: https ://drive.google.com/open?id =1G2XHJxE6QJ0GjQcU5pclP3x7mIxMECzo

顺便说一下,这里是来自 PHP 的 UNSUCCESSFUL Base64 的结果: https ://drive.google.com/open?id = 1PXueFtaws5iT-BlFbpvoGhNzCmT6_8Lp

是的,出于某种原因,来自 PHP 的 base64 是单行的,而 Android 不是,这可能是 PHP 失败的最主要原因。

哦,这里是无法从 base64 PHP 打开的图像的屏幕截图:

在此处输入图片说明

答案实际上非常简单,我查看并检查发送前的 Base64 和发送后的 Base64 之间的差异,并且在后者中 Base64 缺少字符“+”。

POST PHP 正在从我的 Base64 中删除“+”行,因此我使用 str_replace 并从此更改代码:

$path = $dest.$a;
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$strimg = 'data:image/' . $type . ';base64,' . base64_encode($data);

进入这个:

$path = $dest.$a;
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$strimg = 'data:image/' . $type . ';base64,' . base64_encode($data);
$strimg = str_replace("+","%2B",$strimg);

现在一切正常

暂无
暂无

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

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