【问题标题】:Node Js write File from base64 result error "Invalid JPEG structure : two SOF Marker" when decode from php base64 string从 php base64 字符串解码时,Node Js 从 base64 结果错误“无效的 JPEG 结构:两个 SOF 标记”写入文件
【发布时间】:2020-03-28 06:06:16
【问题描述】:

我有一个可以检索 base64 字符串并将其保存到图像中的 Node Js,这是我的 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无法打开的图片截图:

【问题讨论】:

    标签: php android node.js base64


    【解决方案1】:

    答案其实很简单,我看一下 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);
    

    现在一切正常

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多