callCreateFile method

Future<Res> callCreateFile(
  1. String endpoint, {
  2. required String attr,
  3. required String name,
  4. required ByteStream stream,
  5. required int size,
  6. required String type,
  7. required int lastModified,
})

Implementation

Future<Res> callCreateFile(
  String endpoint, {
  required String attr,
  required String name,
  required http.ByteStream stream,
  required int size,
  required String type,
  required int lastModified,
}) async {
  final completer = Completer<Res>();

  final uri = Uri.parse('${_config!.api}/$endpoint');

  final request = http.MultipartRequest('POST', uri);

  if (cacheSession?['_id'] != null) {
    request.headers['X-Auth-Bearer'] = cacheSession!['_id'];
  }
  if (cacheSession?['token'] != null) {
    request.headers['X-Auth-Token'] = cacheSession!['token'];
  }
  if (_config?.appId != null) {
    request.headers['X-Auth-App'] = _config!.appId;
  }

  request.fields['attr'] = attr;
  request.fields['lastModified'] = lastModified.toString();
  request.fields['type'] = type;
  request.fields['name'] = name;
  request.fields['size'] = size.toString();

  final multipartFile = http.MultipartFile(
    'content',
    stream,
    size,
    filename: name,
  );
  request.files.add(multipartFile);

  request.send().then((streamResponse) async {
    final response = await http.Response.fromStream(streamResponse);
    final res = _formatRes(response);

    if (res['status'] != 200) {
      completer.completeError(res);
      return;
    }

    res['args']['docs'][0]['file'] = {
      'name': name,
      'lastModified': lastModified,
      'type': type,
      'size': size,
      'ref': res['args']['docs'][0]['_id'],
    };

    completer.complete(res);
  });

  return completer.future;
}