public async Task <UploadResponse> UploadFile(Stream fileStream, string fileName, string accessToken = null) { var url = ClientSettings.Origin + UploadFilesEndpoint; if (accessToken != null) { Token = accessToken; } if (fileStream.Length == 0) { throw new PyrusApiClientException("Uploaded file can not be empty"); } var streamFactory = new NoDisposeStreamWrapperFactory(fileStream); var response = await this.RunQuery <UploadResponse>(() => RequestHelper.PostFileRequest(this, url, streamFactory, fileName, Token)); return(response); }
internal static async Task <MessageWithStatusCode> PostFileRequest(PyrusClient client, string url, NoDisposeStreamWrapperFactory streamFactory, string fileName, string token) { using (var httpClient = client.ClientSettings.NewHttpClient(_fileRequestTimeout)) { httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); httpClient.DefaultRequestHeaders.Add("ContentType", "multipart/form-data"); httpClient.DefaultRequestHeaders.Add("User-Agent", UserAgent); var streamContent = new StreamContent(streamFactory.Create()); var multipart = new MultipartFormDataContent { { streamContent, "file", $"{fileName}" } }; using (var response = await httpClient.PostAsync(url, multipart)) { var message = await response.Content.ReadAsStringAsync(); return(new MessageWithStatusCode { Message = message, StatusCode = response.StatusCode, ResponseMessage = response }); } } }