php - 解码从android发布的base64图像数据以将图像保存在php服务器上

标签 php android image-uploading

我正在开发一个 Web 服务,使用 php 脚本将图像从 android 设备上传到服务器,其中 base64 字符串形式的图像数据使用 http post 请求从 android 设备发送到服务器。在服务器端,我使用以下代码解码图像数据并将图像保存到服务器:

$json = file_get_contents('php://input');
$obj = json_decode($json);
$base = $obj->image;
$ext = $obj->extension;
$folderPath = "./logo/";
$fileName = 'logo_'.$time.'.'.$ext;

$binary = bin2hex(base64_decode($base));
$data = pack("H" . strlen($binary), $binary);
$file = fopen($folderPath.$fileName, 'wb');
fwrite($file, $data);
fclose($file);

此代码在服务器上保存图像数据,但图像数据与 Android 应用程序发布的数据不同。甚至上传文件的大小与原始文件不匹配。
那么任何人都可以帮助我,以便从 android 应用程序发送的图像数据正确解码并保存在与从 android 发送的图像相同的图像文件中吗?

最佳答案

我解决了这个问题。问题是由于服务器在接收到的图像数据中插入了额外的字符。在服务器上发布任何字符串时,php 服务器将 + 符号视为空格,因此它会为此插入一些额外的字符。它还替换了服务器上接收到的图像数据中的一些其他字符,例如 = 和/符号被替换为一些以 % 符号开头的值。由于图像数据中的这些额外字符,base64_decode 函数无法将 base64 正确解码为二进制。我通过使用 php 的 urldecode 函数解决了这个问题。现在我的工作代码是:

$newBase = urldecode($base);
$binary = base64_decode($newBase);
$file = fopen($folderPath.$fileName, 'wb');
fwrite($file, $binary);
fclose($文件);

现在正确的图像正在上传到服务器。

关于php - 解码从android发布的base64图像数据以将图像保存在php服务器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19458874/

相关文章:

PHP 和 MySQL 为同一日期提供两个不同的周数

php - 如何将用户重定向到不同的网站?

php - 如何使用 codeigniter 在同一字段中搜索 2 个值?

java - 安卓开发 : How can I run a thread while the app is not being used

ios - 如何将带有表单数据的图像上传到api参数上的图像?

asp.net-mvc - ASP.NET MVC : upload multiple image files?

php - 谷歌应用引擎 : How to connect to Cloud SQL with Zend DB

android - 在Android中从一种方法切换到另一种方法时,应用程序崩溃

java - 如何保持从 url 下载到 imageview 的图像质量并将它们裁剪成圆形?

javascript - 将文件类型限制为多个文件 uploader