Dart文件上传:较大的文件没有完全上传
问题描述:
我用dart实现了一个文件上传。 这是我的客户做: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被保存在服务器上。有一个想法,所有这些字节都丢失了吗?
答
writeAsByteSync
将截断任何现有文件,确保最后收到的数据将被写入,并且先前接收的数据将被删除。您可以尝试先创建该文件,然后使用参数mode: FileMode.APPEND
代替writeAsByteSync
+0
非常感谢这是问题 – Ced
查看服务器上的request.listen()是否会在某个点引发错误可能很有趣。尝试在那里添加一个onError处理程序。客户端相同:尝试hanlde' fileReader.onError' – filiph
一个好主意,但不是错误处理程序,被击中 – Ced