如何在服务器端(php)中接收使用XMLHttpRequest从浏览器发送的数据?

如何在服务器端(php)中接收使用XMLHttpRequest从浏览器发送的数据?

问题描述:

我无法理解如何在PHP脚本中从XMLHttpRequest获取blob。 我有这样的代码在JS:如何在服务器端(php)中接收使用XMLHttpRequest从浏览器发送的数据?

var req = new XMLHttpRequest();   // create instance 

var file = document.getElementById('file').files[0];  // get File Object from <input type=file />. It is picture 

req.open("POST", “uploader.php”, true); // make request 

req.setRequestHeader("Content-Type", file.type); set request headers 
req.setRequestHeader("Content-Length", file.size); 

req.send(file);     // send request with file-blob 

if (req.readyState == 4 && req.status == 200) { 
     alert("result = " + req.responseText); 
} 

我明白如何将BLOB发送给服务器,但不知道如何以及从哪里得到它。我尝试使用$_POST$_GET$_FILES全局数组,但它们没有任何文件。我甚至试图添加file像这样的网址:

req.open("POST", “uploader.php?file=” + file, true); 

这也不是解决方案。

在这里阅读答案我发现我可以使用php://input获取原始二进制数据。我试过,是的,我得到了一些原始数据。通过并通过审查这个解决方案。但是想问问这是唯一的方法吗?如果不是,其他人是什么?那么哪一个最适合?

此外,当我设置标题("Content-Length", file.size)时,console.log显示错误并显示“拒绝设置不安全标题”Content-Length“。这个标题不是必需的吗?

看看下面的帖子:

image upload with ajax and php

你真的无法通过XMLHttpRequest来上传一个blob,但你可以像感觉隐藏I帧创建一个AJAX。

它看起来像有一些JQuery插件可以帮助你。

我希望这有助于!

尝试使用此为您的标题:

req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");