Dart:从客户端请求处理服务器上的上传文件

时间:2015-07-30 23:06:22

标签: dart image-uploading

我正在尝试处理从服务器上的客户端上传的图像,但是我收到以下错误。我处理httpRequest错了吗?

未处理的例外:

未捕获错误:HttpException:接收数据时连接已关闭,uri = / api / upload

///客户端代码(dart文件)(Works @发送请求)

sendData(dynamic data) {
final req = new HttpRequest();

FormData fd = new FormData();
fd.append('uploadContent', data);
fd.appendBlob('uploadContent', data);

req.open("POST", "http://127.0.0.1:8080/api/upload", async: true);
req.send(fd);

req.onReadyStateChange.listen((Event e) {
  if (req.readyState == HttpRequest.DONE &&
  (req.status == 200 || req.status == 0)) {
    window.alert("upload complete");
  }
});
}

InputElement uploadInput = document.querySelector('#sideBar-profile-picture');
uploadInput.onChange.listen((Event event){
// read file content as dataURL
final files = uploadInput.files;
if (files.length == 1) {
  File file = files[0];
  FileReader reader = new FileReader();
  reader.onLoad.listen((e) {
    print('results: ${reader.result}');
    sendData(reader.result);
  });
  reader.readAsArrayBuffer(file);
}
});

我有一个小服务器正在侦听请求(/ api / upload)并调用handleUploadRequest,httpRequest作为param传入。

服务器代码(这是我被困的地方)

Future<Null> handleUploadRequest(final HttpRequest httpRequest) async {
   httpRequest.fold(new BytesBuilder(), (b, d) => b..add(d)).then((builder) {
     var data = builder.takeBytes();
     print('bytes builder: ${data}');
   });
}

我正在尝试读取数据,以便我可以将其存储在cdn上,但由于连接在接收数据时总是关闭,因此永远不会有机会。

任何有关能够完成此任务的帮助表示赞赏。过去几天一直在这里:/

1 个答案:

答案 0 :(得分:2)

很难判断何时/是否关闭了httpRequest。如果您在handleUploadRequest返回后立即执行此操作,它将确实关闭连接,因为您不等待httpRequest.fold()完成。添加等待如下所示并确保在之后调用httpRequest.close()此函数异步完成应该可以正常工作

Future<Null> handleUploadRequest(final HttpRequest httpRequest) async {
   await httpRequest.fold(new BytesBuilder(), (b, d) => b..add(d)).then((builder) {
     var data = builder.takeBytes();
     print('bytes builder: ${data}');
   });
}

(仅供参考)我有一个类似的代码,在使用curl进行测试并上传文件时可以正常工作