getCoreUtilsAzureUploadTemplate function

String getCoreUtilsAzureUploadTemplate(
  1. 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';
  }
}
''';
}