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