如何使用Dart从浏览器发送多部分HTTP请求

时间:2014-07-29 21:13:26

标签: dart eve

我必须将图像从浏览器上传到我的RESTful Web API,使用Python Eve实现。从文档中,它需要发送multipart / data-form请求。 (http://python-eve.org/features.html#file-storage)。有'dart:http'库可以做。但是,它需要'dart:io',这在浏览器上是不可用的。那么,无论如何我可以从浏览器发送请求吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

你可以使用这样的东西:

FormData formData = new FormData();
formData.append('image', '...');
HttpRequest.request('url', method: 'post', sendData: formData).then((HttpRequest request) {
  // ...
});

这应该设置正确的mimeType。如果不是,您可以使用mimeType参数进行设置。

此致 罗伯特

答案 1 :(得分:1)

客户端,dart:html库应该可以解决问题。这样的事情(source):

import 'dart:html';

main() {
  InputElement uploadInput = query('#upload');
  uploadInput.on.change.add((e) {
    // read file content as dataURL
    final files = uploadInput.files;
    if (files.length == 1) {
      final file = files[0];
      final reader = new FileReader();
      reader.on.load.add((e) {
        sendDatas(reader.result);
      });
      reader.readAsDataURL(file);
    }
  });
}

/// send data to server
sendDatas(dynamic data) {
  final req = new HttpRequest();
  req.on.readyStateChange.add((Event e) {
    if (req.readyState == HttpRequest.DONE &&
        (req.status == 200 || req.status == 0)) {
      window.alert("upload complete");
    }
  });
  req.open("POST", "http://127.0.0.1:8080/upload");
  req.send(data);
}