ダーツでファイルアップロードを実装しました。 これは私のクライアントが何をするかです:ダーツファイルのアップロード:大きいファイルが完全にアップロードされていません
Future upload(String url, File file){
Completer completer = new Completer();
FileReader fileReader = new FileReader();
fileReader.onLoad.listen((e){
HttpRequest request = new HttpRequest();
Map<String,String> headers = createHeaders();
request.open('POST',url);
for(String key in headers.keys){
request.setRequestHeader(key,headers[key]);
}
request.send(fileReader.result);
});
fileReader.onLoadEnd.listen((e)=>completer.complete());
fileReader.readAsArrayBuffer(file);
return completer.future;
}
そして、これは、サーバーが何をするかです:小さなファイルの場合
Future saveFileContent(String fileId, HttpRequest request)async{
Completer completer = new Completer();
File file = new File('${pathResolver.files}/${fileId}');
await file.create(recursive: true);
request.listen((data){
file.writeAsBytesSync(data);
},onDone:(){
completer.complete();
});
return completer.future;
}
で20メガバイトについて、すべてが正常に動作しますが、私は大きなファイルをアップロードしようとすると、私のテストケースは、ちょうどいくつかのMBがサーバーに保存されています。それらのバイトがすべて失われたアイデアはありますか?
とすると、サーバー上の 'request.listen()'がある時点でエラーをスローするのが面白いかもしれません。そこにonErrorハンドラを追加してみてください。クライアント側でも同じです: 'fileReader.onError'を試してみてください – filiph
エラーハンドラ以外の良いアイデアがヒットしました – Ced