Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PHP从base64数据创建图像已损坏_Javascript_Php_Base64 - Fatal编程技术网

Javascript PHP从base64数据创建图像已损坏

Javascript PHP从base64数据创建图像已损坏,javascript,php,base64,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 = $_P

通过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字符串
    ivborw0kggoaaan…
    ,其中
    数据:(*)base64,
    部分被剪切
  • 原始图像数据正常,直接从画布
    canvas.toDataURL()获取
  • PHP是必须的
试试这个:

var jsonString=JSON.stringify(数据); var req={ url:url, 方法:“POST”, 标题:{'Content Type':'application/x-www-form-urlencoded'}, 数据:{data:jsonString}, };

尝试以下操作:

var jsonString=JSON.stringify(数据); var req={ url:url, 方法:“POST”, 标题:{'Content Type':'application/x-www-form-urlencoded'}, 数据:{data:jsonString},
};

我发现问题应该是由于标题
应用程序/x-www-form-urlencoded
导致的,该标题将数据编码为
url类型

在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)...

我发现问题应该是由于标题
应用程序/x-www-form-urlencoded
,它将数据编码为
url类型

在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)...

我想在数据传输过程中。数据有点变化。例如,
…ggBYYgD7goE+Xxw…
将变成
…ggBYYgD7goE Xxw…
可能这就是原因。但是我怎样才能修复它呢?你在php脚本中获得的数据,复制图像内容并粘贴。检查您是否能够看到图像什么是
$http
?您正在使用JavaScript库吗?该库是否负责对请求后的有效负载进行编码?
$http
是一个角度模块,我在两者之间的数据传输过程中计算得出。数据有点变化。例如,
…ggBYYgD7goE+Xxw…
将变成
…ggBYYgD7goE Xxw…
可能这就是原因。但是我怎样才能修复它呢?你在php脚本中获得的数据,复制图像内容并粘贴。检查您是否能够看到图像什么是
$http
?您正在使用JavaScript库吗?该库负责对请求后有效负载进行编码吗?
$http
是一个角度模块