Как использовать StreamedRequest в http-библиотеке Dart для загрузки файла? - PullRequest
0 голосов
/ 05 июля 2018

Я хочу загрузить файл с помощью не multipart/form-data запроса, например:

POST http://127.0.0.1/upload
Cache-Control: no-cache

< /path/to/file/in/disk

(Я протестировал, и он успешно загрузил файл из REST-клиента JetBrain Rider в мою конечную точку REST.)

Существует класс StreamedRequest в пакете http, но я не нашел конструктора или установщика, который бы подключил к нему поток байтов или содержимое файла.

Как использовать StreamedRequest для загрузки файла в Dart?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Я просто опубликую решение phqb на случай, если ссылка на pastebin выйдет из строя:

final file = new File(filePath);

final streamedRequest =
    new http.StreamedRequest('POST', Configurations.getUserContentsApiUri('/upload'))
      ..headers.addAll({
        'Cache-Control': 'no-cache',
        'Authorization': 'Bearer $uploadToken',
      });
streamedRequest.contentLength = await file.length();
file.openRead().listen((chunk) {
  print(chunk.length);
  streamedRequest.sink.add(chunk);
}, onDone: () {
  streamedRequest.sink.close();
});

await streamedRequest.send();
print('after response');
0 голосов
/ 05 июля 2018

В моем старом коде я использую

  /// Send a POST request to the Docker service.
  Future<http.ByteStream> _streamRequestStream(
      String path, Stream<List<int>> stream,
      {Map<String, String> query}) async {
    assert(stream != null);
    final url = serverReference.buildUri(path, query);
    final request = new http.StreamedRequest('POST', url)
      ..headers.addAll(headersTar);
    stream.listen(request.sink.add);
    final http.BaseResponse response =
        await request.send().then(http.Response.fromStream);
    if (response.statusCode < 200 || response.statusCode >= 300) {
      throw new DockerRemoteApiError(
          response.statusCode, response.reasonPhrase, null);
    }
    return (response as http.StreamedResponse).stream;
  }

который может делать то, что вы хотите

https://github.com/bwu-dart/bwu_docker/blob/master/lib/src/remote_api.dart#L160-L178

Используется пакет http

import 'package:http/http.dart' as http;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...