uploadImage static method

Future<ResponseData> uploadImage(
  1. String endpoint, {
  2. required List<int> imageBytes,
  3. required String fileName,
  4. Map<String, String>? fields,
  5. Map<String, String>? headers,
})

Implementation

static Future<ResponseData> uploadImage(
  String endpoint, {
  required List<int> imageBytes,
  required String fileName,
  Map<String, String>? fields,
  Map<String, String>? headers,
}) async {
  final uri = _getUri(endpoint);
  final requestHeaders = <String, String>{};
  if (ApinionConfig.key != null) {
    requestHeaders['Authorization'] = ApinionConfig.key!;
  }
  if (headers != null) {
    requestHeaders.addAll(headers);
  }

  ApinionLogger.info('📤 Uploading image to $uri');
  try {
    var request = http.MultipartRequest('POST', uri);
    request.headers.addAll(requestHeaders);

    if (fields != null) {
      request.fields.addAll(fields);
    }

    request.files.add(
        http.MultipartFile.fromBytes('file', imageBytes, filename: fileName));

    final streamedResponse =
        await request.send().timeout(ApinionConfig.timeout);
    final response = await http.Response.fromStream(streamedResponse);

    ApinionLogger.debug('📨 Response: ${response.body}');

    return _handleResponse(response);
  } on TimeoutException {
    ApinionLogger.error(
        '⏰ Upload timed out after ${ApinionConfig.timeout.inSeconds} seconds.');
    return ResponseData(
      isSuccess: false,
      statusCode: 408,
      responseData: null,
      errorMessage: 'Upload timeout. Please try again later.',
    );
  } catch (e) {
    ApinionLogger.error('💥 Upload error: $e');
    return ResponseData(
      isSuccess: false,
      statusCode: 500,
      responseData: null,
      errorMessage: 'Unexpected upload error: $e',
    );
  }
}