base64 解码混合结果

Posted

技术标签:

【中文标题】base64 解码混合结果【英文标题】:base64 decode mixed results 【发布时间】:2014-05-27 20:49:20 【问题描述】:

我在 php 中有以下代码,它最有效,很好。我正在将图像从移动设备发送到该脚本,该脚本将其解码为 img 文件并在服务器上从中创建一个文件。我有 99.9% 的把握每次它都是 base64 编码的。

<?php
header('Access-Control-Allow-Origin: *');
header('Content-Type: image/jpeg');

$data = ($_POST['imageData']);

define('UPLOAD_DIR', 'images/');

$img = str_replace('data:image/jpeg;base64,', '', $data);

$data = base64_decode($img);

$file = UPLOAD_DIR . uniqid() . '.jpg';

file_put_contents($file, $data);

echo ('"imgUrl" : "' . $file . '"');

?>

然后返回要添加到数据库的图像 URL。

问题在于,大多数情况下它确实会解码为 .jpg 文件,而其他时候会解码为 txt 文件。我不明白它为什么这样做,因为它有点随机。但我注意到有时它会以 $_POST 的形式出现,而其他时候,$_POST 是 Null。所以我看着使用:

$data = json_decode(file_get_contents('php://input'));

但同样,它似乎不一致。但是我放了一个逻辑语句,例如:

$data = ($_POST['imageData']);
if($data == NULL) 
    $data = json_decode(file_get_contents('php://input'));

有什么理由我应该知道为什么代码可以工作,有时却不能工作?

【问题讨论】:

你的标题是说输出内容类型是一个jpeg图像,然后你输出一个字符串(显然是手工制作一个json字符串......)。您是否为检查 POST 是否正常工作而烦恼?如果你得到一个实际的 .jpg 图像,你应该能够做getimagesize($file) 并获得一些关于它的数据。现在你只是假设一切都会完美运行,这对于基于 Web 的代码来说是一件坏事。 好的,所以进来的数据是base64,文件名是json。创建的文件最终仍为 .txt。我需要删除标题吗?那会解决它吗? 您的代码不可能生成whatever.txt 文件,因为您的代码中实际上没有.txt 是的,打扰了!我已经完成了$_POST 的varDumps,有时它已满,有时它为NULL。在每种情况下,都通过控制台发送数据,以及所有数据。 嗯,嗯,有些东西是,因为有时设备上的图像可以工作,而其他时候则不能,当我看到它并查看服务器文件夹时,它的文件名旁边是.txt 文件。 【参考方案1】:

我知道这个问题很老,但是通过查看这个主题是第一次出现的问题之一。因此,查看此问题的每个人都可以立即找到指向正确答案的链接。

你应该检查这个PHP - get base64 img string decode and save as jpg (resulting empty image )

还要检查你使用的条件,因为

if ($data === NULL)

可能不一样

if ($data == NULL)

另外,您将 base64 字符串错误地保存到图像文件中。 检查该链接,如果有帮助,请告诉我。

【讨论】:

嗨@Koken,如果已经有一个带有答案的问题,则不应将该答案链接到新答案中,而应将此问题标记为重复。请考虑删除此帖子并将问题标记为重复。 嗨@toti08,感谢您的澄清。由于我的声誉低,我无法将问题设置为重复。你还是建议我删除我的答案吗?

以上是关于base64 解码混合结果的主要内容,如果未能解决你的问题,请参考以下文章

Base64解码没有结果

Java:使用 java.util.Base64 与 android.util.Base64 解码 base64 字符串时的不同结果

DES和RSA混合加密&解密

DES和RSA混合加密&解密

DES和RSA混合加密&解密

使用混合类型和混合键控/非键控在 Swift 中解码 JSON