javascript – 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);
上一篇:根据后端的文件数据流,在前端形成下载文件(不是直接通过浏览器下载)


下一篇:javascript – HTML5 FileReader问题