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

时间:2012-04-12 14:24:24

标签: php javascript xmlhttprequest

我无法理解如何在我的PHP脚本中从XMLHttpRequest获取blob。 我在JS中有这样的代码:

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“。这个标题不是必需的吗?

2 个答案:

答案 0 :(得分:1)

查看以下帖子:

image upload with ajax and php

您无法通过XmlHttpRequest真正上传blob,但您可以使用隐藏的iframe创建类似AJAX的感觉。

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

我希望这有帮助!

答案 1 :(得分:1)

尝试将此用作标题:

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