Php Base64解码到文件-缺少什么?

Php Base64解码到文件-缺少什么?,php,base64,file-put-contents,Php,Base64,File Put Contents,我在$u POST字段$u POST['nimage']中有一个in-base64编码的字符串,如果我直接将其作为img标记中的src值进行回显,我会在浏览器中看到图像:echo”“ 现在,我显然错过了一个步骤,因为当我解码字符串并将其写入服务器本地的文件时,试图在浏览器中查看创建的文件会出现错误: “图像”xxxx://myserversomewhere.com/images/img1.jpg'无法显示,因为它包含错误“ 我的解码和文件放置是: $file = base64_decode($_

我在$u POST字段
$u POST['nimage']
中有一个in-base64编码的字符串,如果我直接将其作为
img
标记中的src值进行回显,我会在浏览器中看到图像:
echo”“

现在,我显然错过了一个步骤,因为当我解码字符串并将其写入服务器本地的文件时,试图在浏览器中查看创建的文件会出现错误:

“图像”xxxx://myserversomewhere.com/images/img1.jpg'无法显示,因为它包含错误“

我的解码和文件放置是:

$file = base64_decode($_POST['nimage']);
file_put_contents('images/'. $_POST['imgname'], $file);
这将在本地服务器上生成
images/img1.jpg
。我在这里解码的时候做错了什么?虽然base64输出看起来不是URLENCODE,但我在base64_decode()之前首先尝试了urldecode(),只是为了安全起见,结果相同

base64编码的前几行是:


数据:图像/jpeg;base64,/9j/4AAQSKZJRJABAAQAAAQABAD/2WBDAAMCAGICAGMCAGIDAWMDBAYEBAQEBAGUGCQGKKKKKKK8CGSOCWKJDRENDG8QEEQCW8QEBD/2WBDAQMDAWQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB2.中国政府的一个新的研究(2)中国政府的一个研究(2)中国政府的一个研究(2)中国政府的一个研究(2)中国政府的一个研究(2)中国政府的一个研究(2)中国政府的一个研究(2)中国政府的一个研究(2)中国政府的一个研究(2)中国政府的一个研究(2)中国政府的一个研究(2 2)中国政府的一个研究(2)中国政府的一个研究(2 2 2 2 2 2 2 2)中国政府的一个研究(2 2 2 2)中国政府的研究(2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)中国中国政府的研究(2 2 2 2 2)中国政府的中国政府的研究(2 2。中国政府的研究(2(2 2 2 2 2)在2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2)中国政府的研究(2(2 2 2)在2)JZG2.该书的内容是一份关于某家报纸的论文。该书的内容是一份关于某家报纸的研究。该书的内容是一份关于某家报纸的研究。该书的内容是一份关于某家报纸的研究。该书的内容是一份关于某家报纸的研究。该书的内容是一份关于某家报纸的研究。该书的内容是一家报纸。2。2.该书的内容是一家报纸上的一家报纸。2。2。2。2。该书的内容是一份报纸上的内容是一份B2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2。2数据URI附页眉:

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD...
浏览器使用头标识文件类型和编码,但头不是编码数据的一部分

从数据中去掉标题(
data:image/jpeg;base64,
),并在将其写入文件之前对其余部分进行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\u decode()
的返回值是否为
false
,并以某种方式通过消息中止。它将捕获解码过程中的任何问题(如不删除标头!)。

在解码数据之前,您是否正在剥离数据URI标头(
data:image/jpeg;base64,
)。。。让我试试,希望它就这么简单(对不起,这是我第二次不得不操作Base64编码数据)@HoboSapiens没有帮助-同样的错误,前两行数据现在是
/9j/4AAQSkZJRgABAQAAAQABAAD/2WBDAAMCAGICAGMCAGIDAWMDBAYEBAQEBAGUGCQGKKKKKKKK8CGSOCWKJDRENDG8QEBEQCGWESQUEW8QEBD/2WBDAQMDAWQEBAGBAGQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAD/WAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
base64\u decode()的返回值?如果没有,并且解码失败,您将得到
false
,磁盘上的文件将非常短。去掉标题,然后尝试
$result=base64\u解码($\u POST['nimage']);如果($result==false){exit(“Base64解码失败”);}
。这不会解决您的问题,但可能会发现解码过程中的问题。了解如何将图像放入
$\u POST
数组也可能会有所帮助。我本来希望通过
$\u FILES
@HoboSapiens Man来处理它的,对不起,您剥离URI头是对的,在尝试解决这个问题时,我使用了file\u put\u内容中的$\u POST字段,而不是解码的字符串。在我修复了这个问题并剥离了URI头之后,它工作得很好。把它贴上,回答并感谢。-您知道甚至搜索,所以我在写入文件之前没有看到任何关于剥离URI头的内容…谢谢!我使用substr()删除URI MIME,但是explode工作得更好,所以我将进行更改。