从前端通过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);
然而,所有图像似乎都已损坏,尽管它们都具有正确的宽度高度,但它们的内容为零。
我的问题是如何解决这个问题,从而可以制作出正确的图像?
iVBORw0KGgoAAAAN...
字符串,其中data:(.*)base64,
部分被剪切。canvas.toDataURL()
答案 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)...