我有一个拖放上传器。我正在使用文件阅读器发送数据为网址。
var files = evt.dataTransfer.files;
for (var i = 0, f; f = files[i]; i++) {
var start = 0;
var stop = files[0].size - 1;
var reader2 = new FileReader();
var ext = f.name.substring(f.name.indexOf(".")+1);
reader2.onloadend = function(evt) {
if (evt.target.readyState == FileReader.DONE) { // DONE == 2
$.post("/process/upload.php",{"blob":evt.target.result,"extension":ext},function(data){
console.log(data);
});
}
};
var blob = f.slice(start, stop + 1);
reader2.readAsDataURL(blob);
}
PHP收到它但是一旦我解码它我就会返回“null”
$extension = $_POST['extension'];
$file = base64_decode($_POST['blob']);
$filePath = "../tmp/monkey.".$extension;
echo json_encode(base64_decode($_POST['blob']));
我也尝试过:
if(file_put_contents($filePath,$file)){
echo json_encode("it worked");
}else{
echo json_encode("it failed");
}
编辑:我一直保持POST信息直到我解码它。所以,一旦我解码它,我如何确定文件是完整的并且可以保存?
有更好的解码和保存文件的方法吗? 我究竟做错了什么?
提前致谢!
答案 0 :(得分:2)
$_POST['extension']
和$_POST['blob']
不会神奇地填充到$_POST
数组中。实际上,基于您的JSON格式,JSON将解码为对象,而不是数组。
您需要直接从输入中获取内容,如下所示:
$post = file_get_contents('php://input');
$post_obj = json_decode($post);
$extension = $post_obj->extension;
$file = base64_decode($post_obj->blob);
或使用$HTTP_RAW_POST_DATA
变量,如:
$post_obj = json_decode($HTTP_RAW_POST_DATA);
$extension = $post_obj->extension;
$file = base64_decode($post_obj->blob);