uploadFileBea method

Future<GenericServerResponse<BeaStorageOutput>> uploadFileBea({
  1. GenericServerInput<BeaStorageInput>? input,
  2. OnUploadProgressCallback? onUploadProgress,
  3. CancelToken? cancelToken,
})

Implementation

Future<GenericServerResponse<BeaStorageOutput>> uploadFileBea({GenericServerInput<BeaStorageInput>? input, OnUploadProgressCallback? onUploadProgress, CancelToken? cancelToken}) async {
  GenericServerResponse<BeaStorageOutput> genericServerResponse = new GenericServerResponse<BeaStorageOutput>();
  try{

    if(input == null || input.input == null || input.input!.fileToUpload == null){
      throw new Exception("Input not found or not valid.");
    }

    String? token = await bsm!.getBeaStorage().read(key: KeyUtils.KEY_TOKEN_SESSION);

    File? file = input.input!.fileToUpload;

    String url = UrlUtils.getUrl(_baseUrl, UrlUtils.URL_STORAGE);

    url = url + '?description=${input.input!.description}';

    final mimeTypeData = lookupMimeType(input.input!.fileToUpload!.path, headerBytes: [0xFF, 0xD8])!.split('/');

    Map<String, String> headers = {
      "Authorization": "Bearer $token",
      "Content-Type": "application/json",
      "User-agent": "http.agent"
    };

    Dio dio = new Dio();
    FormData formData = FormData.fromMap({
      "file": await MultipartFile.fromFile(file!.path, filename:path.basename(file.path), contentType: MediaType(mimeTypeData[0], mimeTypeData[1])),
    });

    dio.options.headers.addAll(headers);
    dio.options.sendTimeout = 5000;
    dio.options.receiveTimeout = 10000;

    var response = await dio.postUri(
        Uri.parse(url),
        data: formData,
        cancelToken: cancelToken,
        onSendProgress: (rec, total) {
          onUploadProgress!(rec, total);
    });

    switch(response.statusCode){
      case 200:
        genericServerResponse.data = BeaStorageOutput.fromJson(response.data);
        break;
      case 500:
        var res = response.data['error'];
        BeaError? error = res == null ? res : BeaError.fromJson(res);
        if (error != null) {
          genericServerResponse.beaError = error;
        } else {
          genericServerResponse.beaError = new BeaError("Unknown Error", 0, "");
        }
        break;
      case 401:
        genericServerResponse.beaSession = new BeaSession(true);
        break;
    }
  }catch(e){
    print('Error to upload file to server BEA');
    FLog.error(
        className: this.runtimeType.toString(),
        methodName: "uploadFileBea",
        text: 'Error to upload file to server BEA - $e');
    throw e;
  }

  return genericServerResponse;
}