getCoreUtilsAzureUploadTemplate function
String
getCoreUtilsAzureUploadTemplate(
- String projectName
)
Implementation
String getCoreUtilsAzureUploadTemplate(String projectName) {
return '''
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';
import 'package:${projectName}/core/utils/app_logs.dart';
import '../services/api_service.dart';
class BlobUploadService {
static final Dio _dio = Dio();
/// Upload file bytes to SAS / S3 / Azure URL
static Future<bool> uploadFile({
required String uploadUrl,
required File imageFile,
String contentType = "image/jpeg",
}) async {
try {
final fileBytes = await imageFile.readAsBytes();
final contentType = getContentTypeFromFile(imageFile.path);
final response = await _dio.put(
uploadUrl,
data: fileBytes,
options: Options(
headers: {
"Content-Type": contentType,
"x-ms-blob-type": "BlockBlob", // Required for Azure
},
followRedirects: false,
validateStatus: (status) => status != null && status < 500,
),
);
if (response.statusCode == 200 || response.statusCode == 201) {
AppLogs.showInfoLogs("Upload successful: \${response.data}");
debugPrint("File uploaded successfully");
return true;
} else {
debugPrint("Upload failed: \${response.statusCode}");
debugPrint("Response: \${response.data}");
return false;
}
} catch (e) {
debugPrint("Upload error: \$e");
return false;
}
}
static Future<String> getPreSignedUrl(
String folderName,
String blobName,
) async {
try {
final response = await ApiService.client.post(
"your upload api url",
data: {
"folderName": folderName,
"blobNames": [blobName],
},
);
if (response.success) {
AppLogs.showInfoLogs(
"PreSigned Url Response: \${response.data}",
);
// Robust dynamic parsing based on your API structure
return response.data is Map ? (response.data[blobName] ?? "") : "";
} else {
AppLogs.showInfoLogs("Failed to get PreSigned Url");
throw Exception("Failed to get PreSigned Url: \${response.message}");
}
} catch (e) {
throw Exception("Error retrieving PreSigned Url: \$e");
}
}
static Future<String> getImageUrlFromAzure(
String folderName,
String blobName,
) async {
try {
final response = await ApiService.client.post(
"your get api url",
data: {
"folderName": folderName,
"blobNames": [blobName],
},
);
if (response.success) {
// Robust dynamic parsing based on your API structure
return response.data is Map ? (response.data[blobName] ?? "") : "";
} else {
AppLogs.showInfoLogs("Failed to get image from Azure");
throw Exception("Failed to get image from Azure: \${response.message}");
}
} catch (e) {
throw Exception("Error retrieving image URL: \$e");
}
}
static Future<bool> deleteImageFromAzure(
String folderName,
String blobName,
) async {
try {
final response = await ApiService.client.post(
"your delete api url",
data: {
"folderName": folderName,
"blobNames": [blobName],
},
);
if (response.success) {
return true;
} else {
AppLogs.showInfoLogs("Failed to delete image from Azure");
throw Exception("Failed to delete image from Azure: \${response.message}");
}
} catch (e) {
throw Exception("Error deleting image: \$e");
}
}
}
getContentTypeFromFile(String path) {
final ext = path.toLowerCase().split('.').last;
switch (ext) {
case 'jpg':
case 'jpeg':
return 'image/jpeg';
case 'png':
return 'image/png';
case 'gif':
return 'image/gif';
case 'webp':
return 'image/webp';
case 'pdf':
return 'application/pdf';
case 'doc':
return 'application/msword';
case 'docx':
return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
case 'xls':
return 'application/vnd.ms-excel';
case 'xlsx':
return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
case 'mp4':
return 'video/mp4';
case 'mp3':
return 'audio/mpeg';
default:
return 'application/octet-stream';
}
}
''';
}