Составной запрос с клиентом браузера.дротик


Я пытаюсь отправить составной запрос, используя BrowserClient (package:http/browser_client.dart). Я нашел ответы: Первый и второй. Но они оба используют HttpRequest. BrowserClient может опубликовать строку, список или карту,но я думаю, что должен отправить html.FormData.

2 2

2 ответа:

Используйте класс MultiPartRequest. В документах есть пример, который может помочь:

var uri = Uri.parse("http://pub.dartlang.org/packages/create");
var request = new http.MultipartRequest("POST", url);
request.fields['user'] = 'nweiz@google.com';
request.files.add(await http.MultipartFile.fromPath(
    'package',
    'build/package.tar.gz',
    contentType: new MediaType('application', 'x-tar'));
request.send().then((response) {
  if (response.statusCode == 200) print("Uploaded!");
});

Благодаря @filiph, я нашел, как мы могли бы отправить многопартийный запрос с файлом от angularDart клиента, может быть, это будет полезно для кого-то. Например, у нас есть простой угловой шаблон дротика:

<input #fileInput type="file" accept="image/*" name="file">

Вот простой компонент для загрузки файла:

class FileComponent implements AfterViewInit {

  final Client _http;

  @ViewChild("fileInput")
  ElementRef cameraInputRef;

  HealthApiImpl(this._http);

  @override
  ngAfterViewInit() {
    FileUploadInputElement uploadInput = cameraInputRef.nativeElement;
    uploadInput.onChange.listen((e) {
      File file = (e.target as dynamic).files[0];
      createMultipartFileAndUpload(file);
    });
  }

  void createMultipartFileAndUpload(File file) {
    fileReader.onLoad.listen((e) {
      var target = e.target as dynamic;
      List<int> result = target.result;
      MultipartFile mf = new MultipartFile.fromBytes(
          "file",
          result,
          filename: file.name,
          contentType: new MediaType.parse(file.type));
      upload(mf);
    });
    fileReader.readAsArrayBuffer(removePicture.imageFile);
  }

  void upload(MultipartFile file) {
    var uri = Uri.parse("/uploadUrl");
    var request = new MultipartRequest("POST", uri);
    request.files.add(file);
    var response = await _http.send(request);
    if (response.statusCode == 200) {
        print("success upload");
    }
    throw new "upload error";
  }
}

Клиент вводится как в Примере angular dart tour of heroes.