我无法理解如何在我的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“。这个标题不是必需的吗?
答案 0 :(得分:1)
查看以下帖子:
image upload with ajax and php
您无法通过XmlHttpRequest真正上传blob,但您可以使用隐藏的iframe创建类似AJAX的感觉。
看起来有一些JQuery插件可以帮助你。
我希望这有帮助!
答案 1 :(得分:1)
尝试将此用作标题:
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");