browser_client.dart 的多部分请求
Multipart request with browser_client.dart
我正在尝试使用 BrowserClient (package:http/browser_client.dart)
发送多部分请求。我找到了答案:first and second。但是他们都使用HttpRequest
。 BrowserClient 可以 post 字符串、列表或地图,但我认为我应该发送 html.FormData.
使用MultiPartRequestclass。文档有一个可能有帮助的示例:
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 客户端发送带有文件的多部分请求,可能对某些人有用。例如我们有简单的 angular dart 模板:
<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 fileReader = new FileReader();
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(file);
}
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 英雄之旅示例。
我正在尝试使用 BrowserClient (package:http/browser_client.dart)
发送多部分请求。我找到了答案:first and second。但是他们都使用HttpRequest
。 BrowserClient 可以 post 字符串、列表或地图,但我认为我应该发送 html.FormData.
使用MultiPartRequestclass。文档有一个可能有帮助的示例:
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 客户端发送带有文件的多部分请求,可能对某些人有用。例如我们有简单的 angular dart 模板:
<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 fileReader = new FileReader();
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(file);
}
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 英雄之旅示例。