uploadFile method
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;
}