首页 文章

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

提问于
浏览
1

我正在开发一个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发送的图像相同?

1 回答

  • 1

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

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

    现在正在将正确的图像上载到服务器上 .

相关问题