【发布时间】:2016-12-21 15:52:56
【问题描述】:
我正在测试 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) { }
我想知道我做错了什么是否立即显而易见。文件被解释为二进制字符串并输入到 blob 对象中,内容类型为 text/plain,然后作为 text/plain 发布。
我应该在我的 XHR 对象中使用不同的内容类型标头吗?我是否错误地处理了 blob?
谢谢!
【问题讨论】:
标签: javascript php ajax blob