PHP从base64数据中创建映像已损坏

时间:2017-03-14 06:12:36

标签: javascript php base64

从前端通过ajax请求发布base64编码的图像数据字符串:

var req = {
    url: url,
    method: 'POST',
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    data: 'data=' + data, // data=iVBORw0KGgoAAAAN...
};
$http(req).then(...);

目的地是一个php脚本:

$data = $_POST['data'];
file_put_contents("tmp/".time().".png", $data);

然而,所有图像似乎都已损坏,尽管它们都具有正确的宽度高度,但它们的内容为零。

我的问题是如何解决这个问题,从而可以制作出正确的图像?

  • 我有一个base64编码的imagedata iVBORw0KGgoAAAAN...字符串,其中data:(.*)base64,部分被剪切。
  • 原始图像数据没问题,直接从画布canvas.toDataURL()
  • 获取
  • PHP是必须的。

2 个答案:

答案 0 :(得分:0)

试试这个:

var jsonString = JSON.stringify(data); var req = { url: url, method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, data: {data: jsonString}, };

答案 1 :(得分:0)

我发现问题应该归结为标头application/x-www-form-urlencoded,它将数据编码为url type

在PHP方面,收到的数据需要首先进行URL解码。

另一种解决方案是使用FormData来避免标题。

var formData = new FormData();
formData.append('data', data);

var req = {
    url: url,
    method: 'POST',
    headers: { 'Content-Type': undefined },
    processData: false,
    contentType: false,
    data: formData,
    timeout: 5000,
};
$http(req)...