0

我正在使用 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) {}
4

2 回答 2

0

这是一个非常简单的修复...

当您发送 aBLOB时,它作为filepost数据发送。因此,您需要使用$_FILESnot $_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'])然后,您可以像打开任何其他上传文件一样打开文件服务器端。

于 2013-09-12T10:57:57.523 回答
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...:⡒㠯ݟᑣ"
于 2013-09-12T11:39:50.470 回答