uploadDocument method Null safety
- File file
Allow to upload a GlpiItemType.Document.
file
must be a File object.
Reference: https://github.com/glpi-project/glpi/blob/master/apirest.md#upload-a-document-file
Implementation
Future<Map<String, dynamic>> uploadDocument(
File file,
) async {
if (_sessionToken!.isEmpty) {
throw Exception('No session token, initSession first');
}
final Map<String, String> headers = {
'Session-Token': _sessionToken!,
'Content-Type': 'multipart/form-data',
...?appToken != null ? {'App-Token': appToken!} : null,
};
final uri = Uri.parse('$baseUrl/Document');
final payload = json.encode({
'input': {
'name': file.path.split('/').last,
'_filename': [base64Encode(file.readAsBytesSync())],
}
});
final uploadManifest = '$payload;type=application/json';
final request = http.MultipartRequest('POST', uri)
..headers.addAll(headers)
..fields['uploadManifest'] = uploadManifest
..files.add(http.MultipartFile.fromBytes(
'file',
file.readAsBytesSync(),
filename: file.path.split('/').last,
));
final response = await request.send();
final body = await response.stream.transform(utf8.decoder).join();
if (response.statusCode != 200 && response.statusCode != 207) {
throw Exception('${response.statusCode} $body');
}
Map<String, dynamic> decodedJson = json.decode(body);
return Future.value(decodedJson);
}