Файл POST Flutter для API на веб-сайте Flutter - PullRequest
0 голосов
/ 07 февраля 2020

Я создаю веб-приложение Flutter, которое позволяет пользователю выбрать файл и отправить этот файл в API (обычно это файл PDF).

Это документация по API с веб-сайта:

curl -H 'Authorization: token db313f24f5738c8e04635e036ec8a45cdd6d6b03' \
-F content=@document.pdf \
'https://api.elis.rossum.ai/v1/queues/8236/upload'

Я уже получил это для работы в Python (см. Ниже):

Python Реализация

headers2 = {
 'Authorization': f'token {key}' ,
 }


files = {
'content': (pdf, open(pdf, 'rb')),
}

upload_response = requests.post('https://api.elis.rossum.ai/v1/queues/20383/upload', headers=headers2, files=files)

Я безуспешно пытался реализовать в Flutter Web - каждый раз, получая код состояния 400, ниже моя реализация:

Выбор Файл

uploadNewFile() async {
html.InputElement uploadInput = html.FileUploadInputElement();
uploadInput.multiple = true;
uploadInput.draggable = true;
uploadInput.click();

uploadInput.onChange.listen(
  (changeEvent) {
    final file = uploadInput.files.first;
    final reader = html.FileReader();
    reader.onLoadEnd.listen(
      (loadEndEvent) async {
        _handleResult(reader.result);
      },
    );
    reader.readAsDataUrl(file);
  },
);

}

Результат обработки

  void _handleResult(Object result) {
setState(() {
  _bytesData = Base64Decoder().convert(result.toString().split(",").last);
  _selectedFile = _bytesData;
  _uploadFile('https://api.elis.rossum.ai/v1/queues/20383/upload',
      'TestFile', _selectedFile);
});

}

Файл публикации

Future<http.Response> _uploadFile( var url, String fileName, List<int> fileBytes) async {
String key = await _loginToAPI();

var headers3 = {
  'Authorization': 'token $key',
};
var request = new http.MultipartRequest("POST", Uri.parse(url));

var multipartFile =
    new http.MultipartFile.fromBytes('file', fileBytes, filename: 'Test');
request.files.add(multipartFile);

request.headers.addAll(headers3);

print(request.url);
print(request.files.first);

request.send().catchError((e) {
  print(e);
}).then((value) => print(value.statusCode));

}

...