我在$ _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
答案 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
的调用的返回值,并以某种方式中止消息。它会捕获解码过程中的任何问题(比如不删除标题!)。