【发布时间】: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 文件。