文件输入和Dart

use*_*863 8 file-upload dart

我正在尝试Dart,但我无法弄清楚,如何将图像从用户发送到服务器.我有我的输入标签,我可以在DART代码中达到此目的,但我似乎无法从中读取.我想尝试类似的东西:

InputElement ie = document.query('#myinputelement');

ie.on.change.add((event){<br/>
    InputElement iee = document.query('#myinputelement');<br/>
    FileList mfl =  iee.files;<br/>
    File myFile = mlf.item(0);<br/>

    FileReader fr = new FileReader();
    fr.readAsBinaryString(myFile);

    String result = fr.result; //this is always empty
});
Run Code Online (Sandbox Code Playgroud)

使用html包含:

<input type="file" id="myinputelement">
Run Code Online (Sandbox Code Playgroud)

我真的希望你不能帮助我,我有点卡住了.我可能只是想知道如何为文件读取器执行onload,或者我可能完全错误.

Lar*_*ann 12

的FileReader所以你需要使用事件处理程序的API是异步的.

var input = window.document.querySelector('#upload');
Element log = query("#log");

input.addEventListener("change", (e) {
  FileList files = input.files;
  Expect.isTrue(files.length > 0);
  File file = files.item(0);

  FileReader reader = new FileReader();
  reader.onLoad = (fileEvent) {
    print("file read");
    log.innerHTML = "file content is ${reader.result}";
  };
  reader.onerror = (evt) => print("error ${reader.error.code}");
  reader.readAsText(file);
});
Run Code Online (Sandbox Code Playgroud)

您还需要允许文件上传到您的浏览器,这可以通过使用标志--allow-file-access-from-files启动来在Chrome中完成


sto*_*ack 5

这是使用读取文件的方法dart:html

document.querySelector('#myinputelement`).onChange.listen((changeEvent) {
    List fileInput = document.querySelector('#myinputelement').files;

    if (fileInput.length > 1) {
        // More than one file got selected somehow, could be a browser bug.
        // Unless the "multiple" attribute is set on the input element, of course
    }
    else if (fileInput.isEmpty) {
        // This could happen if the browser allows emptying an upload field
    }

    FileReader reader = new FileReader();
    reader.onLoad.listen((fileEvent) {
          String fileContent = reader.result;
          // Code doing stuff with fileContent goes here!
    });

    reader.onError.listen((itWentWrongEvent) {
          // Handle the error
    });

    reader.readAsText(fileInput[0]);
});
Run Code Online (Sandbox Code Playgroud)