我有一个REST api,假定在post方法中有一个多部分文件。
有没有办法在Dart / AngularDart中做这类帖子,因为到目前为止我找到的所有解决方案都无效。
我已尝试使用http://dart-gde.github.io/dart-google-oauth2-library/multipart_file/MultipartFile.html解决方案,但它无法在浏览器中运行,因为那里不支持dart.io。
我的问题是关于客户端部分直接来自浏览器。用Java编写的服务器端可以处理帖子。
答案 0 :(得分:2)
如果您需要使用multipart进行文件上传,您只需使用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) {
...
});
此外,如果您需要允许用户从其硬盘上传文件,则必须使用带有<input type="file">
标记的html表单。例如:
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>
dart文件:
var formData = new FormData(querySelector("#myForm"));
HttpRequest.request("/service-url", method: "POST", sendData: formData).then((req) {
...
});
答案 1 :(得分:1)
我知道很久以前就问过了这个问题,但是我遇到了同样的问题,我的修复方法如下(根据luizmineo的回答):
formData.appendBlob("data", fileData);
Content-Type
标头。这将使Dart计算表格数据的boundary
部分,这是至关重要的。 答案 2 :(得分:1)
我终于找到了一种将其作为多部分形式发布的方法:
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"/>