Represent the data necessary to make an upload to MediaFire
        public async Task<MediaFireUploadConfiguration> GetUploadConfiguration(
            string fileName,
            long size,
            string folderKey = null,
            MediaFireActionOnDuplicate actionOnDuplicate = MediaFireActionOnDuplicate.Keep,
            DateTime? modificationTime = null)
        {
            var descriptor = new MediaFireUploadConfiguration();

            var requestConfig = await RequestController.CreateHttpRequest(MediaFireApiUploadMethods.Simple);

            ConfigureForSimpleUpload(requestConfig, folderKey, actionOnDuplicate, modificationTime);

            descriptor.Endpoint = requestConfig.GetConfiguredPath();
            descriptor.RequestUrl = RequestController.RemoveBaseUrlFromUrl(descriptor.Endpoint);

            descriptor.RequestHeaders.Add(new KeyValuePair<string, string>(MediaFireApiConstants.FileNameHeader, fileName));
            descriptor.RequestHeaders.Add(new KeyValuePair<string, string>(MediaFireApiConstants.FileSizeHeader, size.ToString()));
            descriptor.RequestHeaders.Add(new KeyValuePair<string, string>(MediaFireApiConstants.ContentTypeHeader, MediaFireApiConstants.SimpleUploadContentTypeValue));

            descriptor.Size = size;
            return descriptor;
        }
        public async Task<MediaFireUploadDetails> Simple(MediaFireUploadConfiguration uploadConfiguration, Stream content, IProgress<MediaFireOperationProgress> progress = null,
            CancellationToken? tokenParam = null)
        {
            var token = tokenParam ?? CancellationToken.None;

            if (progress == null)
                progress = new Progress<MediaFireOperationProgress>();

            var requestConfig = await RequestController.CreateHttpRequestForFullPath(uploadConfiguration.Endpoint, isChunkedOperation: true);

            requestConfig
                .Content(content, true)
                .WithProgress(progress, new MediaFireOperationProgress { TotalSize = uploadConfiguration.Size }, token);

            foreach (var headers in uploadConfiguration.RequestHeaders)
            {
                requestConfig.ContentHeader(headers.Key, headers.Value);
            }



            var res = await RequestController.Post<UploadResponse>(requestConfig);

            if (res.DoUpload.IsSuccess == false)
                throw new MediaFireException(string.Format(MediaFireErrorMessages.UploadErrorFormat, res.DoUpload.Result));


            var uploadInfo = await PollUpload(res.DoUpload.Key);

            uploadInfo.Key = res.DoUpload.Key;

            return uploadInfo;
        }