Как я могу сделать составной пост в Dart/AngularDart

У меня есть REST API, который предполагает многокомпонентный файл в методе публикации.

Есть ли способ делать такие сообщения в Dart/AngularDart, потому что все решения, которые я нашел до сих пор, не работают.

Я пытался использовать http://dart-gde.github.io/dart-google-oauth2-library/multipart_file/MultipartFile.html решение, но оно не работает в браузере, поскольку там не поддерживается dart.io.

Мой вопрос касается клиентской части непосредственно из браузера. Серверная часть, написанная на Java, может обрабатывать пост.


person A3aan    schedule 09.10.2014    source источник


Ответы (3)


Если вам нужна составная часть для загрузки файла, все, что вам нужно сделать, это отправить объект FormData, используя класс HttpRequest. Пример:

import "dart:html";

...

var fileData; //file data to be uploaded

var formData = new FormData();
formData.append("field", "value"); //normal form field
formData.appendBlob("data", fileData); //binary data

HttpRequest.request("/service-url", method: "POST", sendData: formData).then((req) {
  ...
});

Кроме того, если вам нужно разрешить пользователю загружать файл со своего жесткого диска, вы должны использовать html-форму с тегом <input type="file">. Пример:

HTML-файл:

<form id="myForm" action="/service-url" method="POST" enctype="multipart/form-data">
  <input type="text" name="field"> <!-- normal field -->
  <input type="file" name="fileData"> <!-- file field -->
</form>

файл дартс:

var formData = new FormData(querySelector("#myForm"));
HttpRequest.request("/service-url", method: "POST", sendData: formData).then((req) {
  ...
});
person luizmineo    schedule 09.10.2014

Я знаю, что это было задано давно, но у меня была такая же проблема, и исправление для меня следующее (на основе ответа luizmineo):

  • Используйте 1_
  • Не устанавливайте явный заголовок Content-Type. Это заставит Dart вычислить раздел boundary данных формы, который имеет решающее значение.
person Mo Firouz    schedule 08.04.2016

Наконец-то я нашел способ опубликовать его в форме, состоящей из нескольких частей:

void uploadFiles() {
    var formData = new FormData(querySelector("#fileForm"));
    HttpRequest.request("/sp/file", method: "POST", sendData: formData).then((req) {
        print("OK");
    });
}

используется в сочетании с

<form id="fileForm" action="/sp/file" method="POST">
    <input type="file" #upload (change)="uploadFiles(upload.files)"
             (dragenter)="upload.style.setProperty('border', '3px solid green')"
             (drop)="upload.style.setProperty('border', '2px dotted gray')" class="uploadDropZone" name="toUpload"/>
person Zied Hamdi    schedule 16.11.2016