当从 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);
现在一切正常
我有一个 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);
现在一切正常