JS / PHP ajax 发布 Blob
JS / PHP ajax posting Blob
我正在测试 AJAX 文件上传,我希望最终能够使用图像进行上传,但现在我很高兴能够使用文本文件。我会在下面放一段我的代码。
JS
var blob //creates blob global variable.
//reads in blob to blob global var on change of file input.
function readBlob(evt){
var files = evt.target.files;
if(!files.length){
alert("no file");
return;
}
var file = files[0];
var reader = new FileReader();
reader.onloadend = function(evt){
if (evt.target.readyState == FileReader.DONE){
document.getElementById("jsReturnDiv").textContent = evt.target.result;
blob = new Blob([evt.target.result], {type: 'text/plain'});
}
};
reader.readAsBinaryString(file);
}
function post(){
var i = 0;
xhr.open("POST","what.php",true);
xhr.setRequestHeader("content-type","text/plain");
xhr.onreadystatechange = function(){
if(xhr.status == 200 && xhr.readyState == 4){
callback(xhr.responseText);
}
log(i,xhr.responseText);
i++;
}
xhr.send(blob);
}
function callback(text){ //HUEHUEHUE
document.getElementById("phpReturnDiv").innerHTML = text + "</br>___encoded</br>" + jsVarDump(blob) //+ "</br>___decoded</br>" + jsVarDump(decodeURIComponent(blob));
}
function log(index, text){
console.log("index:"+index+"_______________________\n"+text);
}
PHP
<?php
var_dump($_POST);
?>
我遇到的问题是 php 的输出总是:
array(0) { }
我想知道我做错了什么很明显。文件被解释为二进制字符串,并被送入内容类型为 text/plain 的 blob object,然后发布为 text/plain。
我应该在我的 XHR object 中使用不同的 content-type header 吗?我是否错误地处理了 blob?
谢谢!
您必须阅读 php://input 才能从内容类型为 text/plain
的 post 中获取数据。 $_POST 仅填充 application/x-www-form-urlencoded
和 multipart/form-data
$text = file_get_contents('php://input');
我正在测试 AJAX 文件上传,我希望最终能够使用图像进行上传,但现在我很高兴能够使用文本文件。我会在下面放一段我的代码。
JS
var blob //creates blob global variable.
//reads in blob to blob global var on change of file input.
function readBlob(evt){
var files = evt.target.files;
if(!files.length){
alert("no file");
return;
}
var file = files[0];
var reader = new FileReader();
reader.onloadend = function(evt){
if (evt.target.readyState == FileReader.DONE){
document.getElementById("jsReturnDiv").textContent = evt.target.result;
blob = new Blob([evt.target.result], {type: 'text/plain'});
}
};
reader.readAsBinaryString(file);
}
function post(){
var i = 0;
xhr.open("POST","what.php",true);
xhr.setRequestHeader("content-type","text/plain");
xhr.onreadystatechange = function(){
if(xhr.status == 200 && xhr.readyState == 4){
callback(xhr.responseText);
}
log(i,xhr.responseText);
i++;
}
xhr.send(blob);
}
function callback(text){ //HUEHUEHUE
document.getElementById("phpReturnDiv").innerHTML = text + "</br>___encoded</br>" + jsVarDump(blob) //+ "</br>___decoded</br>" + jsVarDump(decodeURIComponent(blob));
}
function log(index, text){
console.log("index:"+index+"_______________________\n"+text);
}
PHP
<?php
var_dump($_POST);
?>
我遇到的问题是 php 的输出总是:
array(0) { }
我想知道我做错了什么很明显。文件被解释为二进制字符串,并被送入内容类型为 text/plain 的 blob object,然后发布为 text/plain。
我应该在我的 XHR object 中使用不同的 content-type header 吗?我是否错误地处理了 blob?
谢谢!
您必须阅读 php://input 才能从内容类型为 text/plain
的 post 中获取数据。 $_POST 仅填充 application/x-www-form-urlencoded
和 multipart/form-data
$text = file_get_contents('php://input');