如何在服务器端(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");