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 解码混合结果的主要内容,如果未能解决你的问题,请参考以下文章
Java:使用 java.util.Base64 与 android.util.Base64 解码 base64 字符串时的不同结果