Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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服务器上保存通过AJAX上传的二进制数据_Javascript_Php_Jquery_Ajax_Binary - Fatal编程技术网

Javascript 在PHP服务器上保存通过AJAX上传的二进制数据

Javascript 在PHP服务器上保存通过AJAX上传的二进制数据,javascript,php,jquery,ajax,binary,Javascript,Php,Jquery,Ajax,Binary,我已将.png图像文件读入数组缓冲区 var readSingleFile = function(e) { var file = e.target.files[0]; if (!file) { return; } var reader = new FileReader(); reader.onload = function(e) { var cont

我已将
.png
图像文件读入数组缓冲区

var readSingleFile = function(e) {
          var file = e.target.files[0];
          if (!file) {
            return;
          }
          var reader = new FileReader();
          reader.onload = function(e) {
            var contents =new Int8Array(e.target.result);

            $.ajax({
                   url: 'saveBinaryData.php',
                   type: 'POST',
                   contentType: 'application/octet-stream', 
                   data: contents,
                   processData: false
                }); 
          };
          reader.readAsArrayBuffer(file);
        }
正如AJAX所描述的,这被发布到一个PHP文件中

如何将此二进制数据转换为图像格式

到目前为止,我的代码是:

<?php
 if($data=file_get_contents($_POST)){
   echo "Error! Data not read!";
   return;
  }

  $data = imagecreatefromstring($data);

  var_dump($data);

  file_put_contents("recentImage1.png", $data);
  ?>


这些都来自于谷歌的各种解决方案。图像文件已创建,但不包含任何内容,因此无法打开

这是一个简单的工作演示,用于保存上载的文件:

JS:


upload=函数(){
f=新文件读取器();
f、 onload=函数(e){
$.ajax({
url:“?上载”,
键入:“POST”,
contentType:'应用程序/八位字节流;字符集=UTF-8',
数据:e.target.result.split(“,”,2)[1],//删除文本标题
processData:false
});
};
f、 readAsDataURL($('input')[0]。文件[0]);
}
HTML:


上传
和PHP:

<?php
if (isset($_GET['upload'])) {
    $file = file_get_contents('php://input');
    file_put_contents('recentImage1.png', base64_decode($file));
}

您是否尝试将上传的数据直接写入文件?我认为它不需要在服务器端进行任何转换。至少这是我通过AJAX上传图像的方式(但也许我使用的是另一个库)。是的,这是我做的第一件事——没有乐趣。后来我看了一下
imagecreatefromstring()
file\u get\u contents()希望参数1是一个有效的路径,数组在/var/www/html/mqttHandscan/saveBinaryData.php中给出,它取自Apache2错误登录,因为您将文件转换为数组。相反,您应该将其转换为字符串或URL:查找
readAsDataURL()
readAsBinaryString()
var\u dump($data)
正在返回
NULL
。看起来它无法读取上载的文件内容。
<input type="file" />
<button onclick="upload()">Upload</button>
<?php
if (isset($_GET['upload'])) {
    $file = file_get_contents('php://input');
    file_put_contents('recentImage1.png', base64_decode($file));
}