我正在使用Blob将二进制数据发送到服务器,但$_POST
变量中没有任何内容。我做错了什么?
var xhr = new XMLHttpRequest();
xhr.open('POST', '/save.php', true);
var formData = new FormData();
formData.append("data", new Blob(["㚂☇䰉耸ڀ찃怮...binary...:⡒㠯ݟᑣ"]));
xhr.send(formData);
xhr.onload = function(e){
if (this.status == 200){
console.log(this.responseText);
}
};
服务器端:
var_dump($_POST); //returns array(0) {}
答案 0 :(得分:0)
这是一个非常简单的修复......
当您发送BLOB
时,它会以file
而不是post
数据的形式发送。因此,您需要使用$_FILES
而不是$_POST
。
使用修改为var_dump($_FILES)
输出的代码:
"array(1) {
["data"]=>
array(5) {
["name"]=>
string(4) "blob"
["type"]=>
string(24) "application/octet-stream"
["tmp_name"]=>
string(14) "/tmp/tmpfilename"
["error"]=>
int(0)
["size"]=>
int(44)
}
}
然后,您可以使用与其他任何上传文件相同的file_get_contents($_FILES['data']['tmpname'])
打开文件服务器端。
答案 1 :(得分:0)
我设法以这种方式发送数据:
var xhr = new XMLHttpRequest();
xhr.open('POST', '/save.php', true);
xhr.send("㚂☇䰉耸ڀ찃怮...binary...:⡒㠯ݟᑣ");
xhr.onload = function(e){
if (this.status == 200){
console.log(this.responseText);
}
};
服务器端:
var_dump($HTTP_RAW_POST_DATA); //string(1820) "㚂☇䰉耸ڀ찃怮...binary...:⡒㠯ݟᑣ"