【问题标题】:PHP create image from base64 data corruptedPHP从损坏的base64数据创建图像
【发布时间】:2017-03-14 06:12:36
【问题描述】:

通过 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 编码的图像数据字符串 iVBORw0KGgoAAAAN...,其中 data:(.*)base64, 部分被剪切。
  • 原始imagedata是ok的,直接从一个canvascanvas.toDataURL()获取
  • PHP 是必须的。

【问题讨论】:

  • 我在数据传输过程中弄清楚了。数据略有变化。例如...ggBYYgD7goE+Xxw... 将变为...ggBYYgD7goE Xxw...
  • 也许这就是原因。但是我该如何解决呢?
  • 您在 php 脚本中获取的数据,复制该图像内容并粘贴到 codebeautify.org/base64-to-image-converter。检查您是否能够看到图像
  • 什么是$http?你在使用 JavaScript 库吗?该库是否负责对发布请求有效负载进行编码?
  • $http 是一个角度模块

标签: javascript php base64


【解决方案1】:

试试这个:

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

【讨论】:

    【解决方案2】:

    我发现问题应该是由于标头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)...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-11
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多