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));
}