【发布时间】:2016-07-06 18:07:50
【问题描述】:
我用 dart 实现了一个文件上传。 这是我的客户所做的:
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;
}
对于小文件,一切正常,但是当我尝试上传更大的文件时,我的测试用例中大约 20MB,服务器上只保存了一些 MB。有人知道所有这些字节在哪里丢失了吗?
【问题讨论】:
-
看看服务器上的
request.listen()是否在某个时候抛出错误可能会很有趣。尝试在那里添加一个 onError 处理程序。客户端也一样:尝试处理fileReader.onError -
一个好主意,但未命中错误处理程序