Base64Decode to file - 什么是丢失的?

时间:2015-06-08 02:00:13

标签: php base64 file-put-contents

我在$ _POST字段$_POST['nimage']中使用base64编码的字符串,如果我直接将其作为img标记中的src值回显,我在浏览器中看到图像就好了{{1} }

现在,我显然错过了一个步骤,因为当我echo "<img src='".$_POST['nimage']."'>";字符串并将其写入服务器本地的文件时,尝试在浏览器中查看创建的文件时出现错误:

&#34;图片&#39; xxxx://myserversomewhere.com/images/img1.jpg'无法显示,因为它包含错误&#34;

我的解码和文件放置是:

base64_decode

导致本地服务器上出现$file = base64_decode($_POST['nimage']); file_put_contents('images/'. $_POST['imgname'], $file); 。我在解码时做错了什么?虽然base64输出似乎没有URL编码,但我在base64_decode()之前首先尝试了urldecode(),只是为了安全测量,结果相同。

base64编码的前几行是:

images/img1.jpg

1 个答案:

答案 0 :(得分:0)

您正在解码的数据附加了数据URI标头:

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD...

浏览器使用标题来标识文件类型和编码,但不是编码数据的一部分。

从数据中删除标题(data:image/jpeg;base64,),然后在将其写入文件之前对其余部分进行解码:您应该好好去。

$b64 = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD...';
$dat = explode(',' $b64);

// element 1 of array from explode() contains B64-encoded data
if (($fileData = base64_decode($dat[1])) === false) { 
   exit('Base64 decoding error.');
}
file_put_contents($someFileName, $fileData);

注意:检查base64_decode()false的调用的返回值,并以某种方式中止消息。它会捕获解码过程中的任何问题(比如不删除标题!)。