当从 php base64 字符串解码时,Node Js 从 base64 结果错误 "Invalid JPEG structure : two SOF Marker" 写入文件

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) 将图像转换为 Base64 字符串的代码:

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

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

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

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

上面的代码在创建文件时也没有问题或错误,但是当我打开文件时。它导致错误 "Invalid JPEG structure : two SOF Marker"

为什么会这样?我在 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 Before Sent和Base64 After Sent的区别,后者的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);

现在一切正常