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被保存在服务器上。有一个想法,所有这些字节都丢失了吗?

+0

查看服务器上的request.listen()是否会在某个点引发错误可能很有趣。尝试在那里添加一个onError处理程序。客户端相同:尝试hanlde' fileReader.onError' – filiph

+0

一个好主意,但不是错误处理程序,被击中 – Ced

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

+0

非常感谢这是问题 – Ced