9

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
});

次を含むhtmlを使用:

<input type="file" id="myinputelement">

私はあなたが私を助けることができないことを本当に願っています.私はちょっと立ち往生しています. ファイルリーダーのオンロードを行う方法を見逃しているか、まったく間違っている可能性があります。

4

5 に答える 5

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);
});

また、ブラウザからのファイルのアップロードを許可する必要があります。これは、フラグ--allow-file-access-from-files を使用して Chrome で開始することで実行できます。

于 2012-02-09T16:50:33.497 に答える
6

これは、を使用してファイルを読み取る方法です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]);
});
于 2016-09-14T22:19:57.970 に答える
2

dart:html の代わりに dart:dom FileReader を使用する必要は (もう) ありません。

次のように、ファイル リーダーにイベント リスナーを追加すると、コードが機能するはずです。

FileReader fr = new FileReader();
fr.on.load.add((fe) => doSomethingToString(fe.target.result));
fr.readAsBinaryString(myFile);
于 2012-05-21T14:17:15.217 に答える