【发布时间】:2017-02-26 02:37:29
【问题描述】:
我正在尝试使用此 javascript 代码读取由 input[type=file] 字段选择的图像文件:
var reader = new FileReader();
var blob;
reader.onloadend = function (e) {
blob = e.target.result;
}
reader.readAsDataURL(this.files[0]);
但是当我在浏览器中运行代码时,我收到了这个错误:
TypeError: Argument 1 of FileReader.readAsDataURL is not an object.
任何人都可以看到这里出了什么问题?
更新
这是包含此 sn-p 的代码。应该提供有关导致错误的原因的更多上下文,我希望:
$('#submit').on('click', function(){
var $form = $( 'form.form' ), url = $form.attr( "action" ), str = $form.serialize();
$('input[type=file]').each(function(){
var reader = new FileReader();
var blob;
reader.onloadend = function (e) {
blob = e.target.result;
}
reader.readAsDataURL(this.files[0]);
str = str + "\u0026" + $(this).attr("name") + "=" + blob;
});
var posting = $.post( url, str );
posting.done(function(data){
if(data == "") {
$("#alerta_sucesso").css("display", "block");
} else {
$("#alerta_erro").find("#texto").text(data);
$("#alerta_erro").css("display", "block");
}
});
});
更新 2
我设法更改代码并在没有错误的情况下执行它,但即便如此我也无法将图像存储在变量blob 中以将此数据发送到服务器。当前代码是这样的:
$('#submit').on('click', function(){
var $form = $( 'form.form' ), url = $form.attr( "action" ), str = $form.serialize();
var input = $form.find('input[type=file]');
$form.find('input[type=file]').each(function(){
var id = $(this).attr("id");
if(typeof id !== "undefined") {
if(this.files.length > 0) {
var reader = new FileReader();
var blob;
reader.onloadend = function (e) {
blob = e.result;
}
reader.readAsDataURL(this.files[0]);
str = str + "\u0026" + $(this).attr("name") + "=" + blob;
}
}
});
var posting = $.post( url, str );
posting.done(function(data){
if(data == "") {
$("#alerta_sucesso").css("display", "block");
} else {
$("#alerta_erro").find("#texto").text(data);
$("#alerta_erro").css("display", "block");
}
});
});
我认为现在问题出在线路上:
blob = e.result;
有人知道这应该是什么值吗?
【问题讨论】:
-
可以创建一个stacksn-ps来演示吗?
-
@guest271314 我用我之前发布的 sn-p 所在的完整代码更新了问题。我希望这可以为导致错误的原因提供更广泛的背景。
-
@guest271314 我想要完成的事情:提交
input字段选择的图像以及其余的文本字段(现在,这没有发生,因为函数 $.serialize 没有读取这个input[type=file]归档)。 -
onloadend提供.result的FileReader.readAsDataURL()异步调用。为什么发送查询字符串而不使用FormData()?document中是否有多个<input type="file">元素?您可以在问题中包含html吗?
标签: javascript jquery filereader