FileReader读取未定义的文件结果

我希望将上传文件的内容读入一个Javascript变量。

该程序用于使用file.getAsBinary工作,但现在已被弃用,需要更新以使用FileReader()

一个表单有一个文件上传选择,onsubmit在javascript中运行一个函数uploadDB()。

变量dbname被传递好,就像上传选择中的文件名一样,我可以通过alert或console.log看到它。

接收文件文本的最终bfile变量未定义。 我已经尝试了readAsText和ReadAsBinary,但bfile未定义。 var声明在函数uploadDB()中,并且对于内部函数应该是全局的。 如果范围在某种程度上是一个问题,我如何在bfile变量中得到结果。

它可能很简单,但我不能让它工作。 有人可以提出一些建议吗? html部分是;

<form onsubmit="uploadDB()"; method="post">
Database <input type=text name="dbName" id="dbName" size=20>
<input type=file id="metaDescFile" size=50 >
<input type=submit value="Submit">
</form>

js脚本类似于(编辑了外部的东西);

<script language="javascript" type="text/javascript">
<!--
    var uploadDB = function() {
        var input = document.getElementById('metaDescFile');
        var fname = document.getElementById('metaDescFile').value;
        var file=input.files[0];
        var bfile;

        reader = new FileReader();

        reader.onload = function(e) {  bfile = e.target.result }
        reader.readAsText(file);
        alert(bfile);   // this shows bfile as undefined


        // other stuff
    }

因为在onload回调中设置了bfile,您将无法在该回调之外访问,因为在回调被触发之前计算代码。

尝试这个:

reader = new FileReader();
reader.onload = function(e) {  
  bfile = e.target.result 
  alert(bfile);   // this shows bfile
}
reader.readAsText(file);

我意识到这个问题是旧的,但你可以使用回调访问bfile变量。 代码如下所示:

var callback = function(fileData) {
  alert(fileData); // Or do something else with it...
}

var reader = new FileReader();
reader.onload = function(e, callback) {
  callback(e.target.result);
}

reader.readDataAsURL(file);
链接地址: http://www.djcxy.com/p/94613.html

上一篇: FileReader read file undefined result

下一篇: Algorithm to find the largest drop in an array