uploadFile method

  1. @override
Future<MediaAsset> uploadFile(
  1. String fileName,
  2. Uint8List fileData
)
override

Upload a non-image file.

Implementation

@override
Future<MediaAsset> uploadFile(String fileName, Uint8List fileData) async {
  final ext = fileName.contains('.')
      ? fileName.split('.').last.toLowerCase()
      : 'bin';
  final hash = fileData.length.toRadixString(16); // simple mock hash
  final assetId = 'file-$hash-$ext';

  if (_media.containsKey(assetId)) {
    return _media[assetId]!;
  }

  final mimeType = switch (ext) {
    'pdf' => 'application/pdf',
    'doc' => 'application/msword',
    'docx' =>
      'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
    'txt' => 'text/plain',
    'csv' => 'text/csv',
    'xlsx' =>
      'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    _ => 'application/octet-stream',
  };

  final id = _genMediaId();
  final asset = MediaAsset(
    id: id,
    assetId: assetId,
    fileName: fileName,
    mimeType: mimeType,
    fileSize: fileData.length,
    publicUrl: 'https://mock-cdn.test/media/$assetId/$fileName',
    width: 0,
    height: 0,
    hasAlpha: false,
    blurHash: '',
    createdAt: DateTime.now(),
    metadataStatus: MediaAssetMetadataStatus.complete,
  );
  _media[assetId] = asset;
  return asset;
}