繁体   English   中英

Javascript dataURL POST 到 PHP 不起作用

[英]Javascript dataURL POST to PHP not working

我正在尝试将 dataURL 发布到 php,但没有成功。 我的 .js 文件如下。

var dataURL = signaturePad.toDataURL();
alert(dataURL);
$.ajax({ 
    type: "POST", 
    url: "test.php", 
    data: { 
    imgBase64: dataURL 
    } 
    }).done(function(o) { 
      console.log('saved');
      alert(o); 
    });

alert(dataURL) 输出如下;

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhkAAADZCAYAAACNbSIWAAAeW.....

测试文件

<?php
if($_POST['imgBase64']) { 
$img = $_POST['imgBase64'];
}
else{
$img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhkAAADZCAYAAACNbSIWAAAeW.....";
}
$img = str_replace('data:image/png;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$fileData = base64_decode($img);
//saving
$timestamp = date('YmdHis');
$fileName = ''.$timestamp.'.png';
echo"$fileData";
file_put_contents($fileName, $fileData);
?>

在我的 php 文件中,为了测试目的,我输入了我的警报值。 现在我的 php 页面由于测试而 100% 工作并且没有从我的 .js 函数传递任何值。 但是使用正确的值,它甚至不会发布到我的 php 页面,只有当我从 dataURL 中删除所有非标准字符时,它才会发布,但明显带有损坏的数据。

为了避免进一步混淆,以下代码 100% 有效,.js 和 php。 其中 var dataURL = signaturePad.toDataURL(); 传递给函数

function postData(data) {
    alert(data);
    var desired = data.replace(/[^\w\s]/gi, '');
    $.ajax({ 
        type: "POST", 
        url: "test.php", 
        data: { 
        imgBase64: desired 
        } 
    }).done(function(o) { 
       console.log('saved');
       alert(o); 
    }); 
}

所以问题是 .js 由于特殊字符不会使用给定的 dataUrl 发布,但我无法删除它们..我什至尝试过 var desired = encodeURIComponent(data); 女巫我至少可以在 php 页面上解码,但这也不想发布。

data: { 
    imgBase64: data
    //send key is imgBase64 and data value is undefined in given scope
    //replace data with dataURL
} 

并在 php 文件中将此$_POST['image']更改$_POST['imgBase64']

谢谢回复。。

我最终首先创建了一个 blob 并发布了 blob。

function dataURLToBlob(dataURL) {
  var parts = dataURL.split(';base64,');
  var contentType = parts[0].split(":")[1];
  var raw = window.atob(parts[1]);
  var rawLength = raw.length;
  var uInt8Array = new Uint8Array(rawLength);

  for (var i = 0; i < rawLength; ++i) {
    uInt8Array[i] = raw.charCodeAt(i);
  }


  return new Blob([uInt8Array], { type: contentType }); 



    $.post("test2.php",
    {
      name: uInt8Array
    },
    function(data,status){
      alert("Data: " + data + "\nStatus: " + status);
    });

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM