uploadMedia method

Future<DialoguewiseResponse> uploadMedia(
  1. String fileName,
  2. List<int> fileData,
  3. String mimeType
)

Uploads an image or file and returns the file URL. Takes fileName as the name of the file. Takes fileData as the file binary data. Takes mimeType as the mime type. Throws ArgumentError if the file data is empty. Throws ArgumentError if the mime type is empty.

Implementation

Future<DialoguewiseResponse> uploadMedia(
    String fileName, List<int> fileData, String mimeType) async {
  if (fileData.isEmpty) {
    throw ArgumentError('Please provide the file data.');
  }
  if (mimeType.isEmpty) {
    throw ArgumentError('Please provide the mime type of the file.');
  }
  if (fileName.isEmpty) {
    throw ArgumentError('Please provide a filename.');
  }

  final apiUrl = '$apiBaseUrl${Endpoints.uploadMedia}';
  final uri = Uri.parse(apiUrl);

  final List<String> mediaType = mimeType.split('/');

  final httpRequest = http.MultipartRequest('POST', uri)
    ..headers['Access-Control-Allow-origin'] = '*'
    ..headers['Access-Control-Allow-Methods'] = '*'
    ..headers['Access-Control-Allow-Headers'] = 'Content-Type, Access-Token'
    ..headers['Access-Token'] = accessToken
    ..files.add(
      http.MultipartFile.fromBytes(
        'file',
        fileData,
        filename: fileName,
        contentType: MediaType(mediaType.first, mediaType.last),
      ),
    );

  final http.StreamedResponse response = await httpRequest.send();
  DialoguewiseResponse dialogueWiseResponse = DialoguewiseResponse(
    reasonPhrase: response.reasonPhrase ?? 'Something went wrong.',
    statusCode: response.statusCode,
  );
  var responseBody = await response.stream.bytesToString();
  if (responseBody.isNotEmpty) {
    dialogueWiseResponse = dialogueWiseResponse.copyWith(
      response: jsonDecode(responseBody) as Map<String, dynamic>,
    );
  }

  return dialogueWiseResponse;
}