Я создаю веб-приложение 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));
}