uploadFile method
Upload a file to Google AI Files API
Implementation
Future<GoogleFile> uploadFile({
required List<int> data,
required String mimeType,
required String displayName,
}) async {
try {
// Create file metadata
final metadata = {
'file': {
'displayName': displayName,
'mimeType': mimeType,
}
};
// Create multipart form data
final formData = FormData.fromMap({
'metadata': jsonEncode(metadata),
'data': MultipartFile.fromBytes(
data,
filename: displayName,
),
});
final response = await client.dio.post(
'upload/v1beta/files?key=${config.apiKey}',
data: formData,
options: Options(
headers: {
'X-Goog-Upload-Protocol': 'multipart',
},
),
);
if (response.statusCode != 200) {
final errorMessage = response.data?['error']?['message'] ??
'File upload failed: ${response.statusCode}';
throw ProviderError(errorMessage);
}
final fileData = response.data['file'] as Map<String, dynamic>;
final uploadedFile = GoogleFile.fromJson(fileData);
// Cache the uploaded file
final cacheKey = '${displayName}_${data.length}_$mimeType';
_fileCache[cacheKey] = uploadedFile;
return uploadedFile;
} on DioException catch (e) {
throw _handleDioError(e);
} catch (e) {
throw GenericError('File upload error: $e');
}
}