upload method

Future<FileInfo> upload(
  1. Uint8List bytes,
  2. String filename, {
  3. String? mimeType,
  4. String? bucket,
  5. bool isPublic = false,
  6. Map<String, dynamic>? metadata,
})

Uploads a file

Implementation

Future<FileInfo> upload(
  Uint8List bytes,
  String filename, {
  String? mimeType,
  String? bucket,
  bool isPublic = false,
  Map<String, dynamic>? metadata,
}) async {
  final request = http.MultipartRequest('POST', Uri.parse('$baseUrl/upload'));

  // Add headers
  request.headers.addAll(_headers);

  // Add file
  request.files.add(http.MultipartFile.fromBytes(
    'file',
    bytes,
    filename: filename,
    contentType: mimeType != null
        ? http.MediaType.parse(mimeType)
        : null,
  ));

  // Add optional fields
  if (bucket != null) {
    request.fields['bucket'] = bucket;
  }
  request.fields['isPublic'] = isPublic.toString();
  if (metadata != null) {
    request.fields['metadata'] = jsonEncode(metadata);
  }

  final streamedResponse = await _client.send(request);
  final response = await http.Response.fromStream(streamedResponse);

  final data = _handleResponse(response);
  final files = data['files'] as List?;
  if (files == null || files.isEmpty) {
    throw const VinculumException('Upload failed: no file returned');
  }

  return FileInfo.fromJson(files.first as Map<String, dynamic>);
}