Dart文件上传:不会完全上传较大的文件

时间:2016-07-06 18:07:50

标签: web server dart

我用dart实现了一个fileupload。 这就是我的客户所做的事情:

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保存在服务器上。有人知道所有这些字节都丢失了吗?

1 个答案:

答案 0 :(得分:3)

writeAsByteSync将截断任何现有文件,因此确实会写入最后收到的数据,并且先前接收的数据将被删除。您可以先尝试创建文件,然后使用参数mode: FileMode.APPEND进行writeAsByteSync