4

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

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

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

变量 dbname 可以正常传递,上传选择中的文件名也是如此,我可以通过警报或 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
    }
4

2 回答 2

6

当 bfile 在回调中设置时,onload您将无法在该回调之外访问,因为在触发回调之前对代码进行了评估。

尝试这个:

reader = new FileReader();
reader.onload = function(e) {  
  bfile = e.target.result 
  alert(bfile);   // this shows bfile
}
reader.readAsText(file);
于 2013-01-09T00:02:15.737 回答
1

这是获得实际最终字节数组的一个答案,只需使用FileReaderand ArrayBuffer

 const test_function = async () => {

      ... ... ...

      const get_file_array = (file) => {
          return new Promise((acc, err) => {
              const reader = new FileReader();
              reader.onload = (event) => { acc(event.target.result) };
              reader.onerror = (err)  => { err(err) };
              reader.readAsArrayBuffer(file);
          });
       }
       const temp = await get_file_array(files[0])
       console.log('here we finally ve the file as a ArrayBuffer : ',temp);
       const fileb = new Uint8Array(fileb)

       ... ... ...

  }

你想读取file的对象在哪里,注意这是一个函数……Fileasync

于 2021-11-29T14:57:07.920 回答