public async Task <AmazonToken> UploadFile(Stream file) { // get upload token var amazonFile = await Post <AmazonToken>("/v2/file", new ByteArrayContent(new byte[] { })); // create payload var payload = new MultipartContent("form-data"); payload.AddFormContent("key", amazonFile.Request.Fields.Key); payload.AddFormContent("x-amz-algorithm", amazonFile.Request.Fields.AmazonAlgorithm); payload.AddFormContent("x-amz-credential", amazonFile.Request.Fields.AmazonCredential); payload.AddFormContent("x-amz-date", amazonFile.Request.Fields.AmazonDate); payload.AddFormContent("policy", amazonFile.Request.Fields.Policy); payload.AddFormContent("x-amz-signature", amazonFile.Request.Fields.AmazonSignature); payload.AddStreamContent("file", amazonFile.FileId, file, "application/octet-stream"); // upload to S3 var response = await new HttpClient().PostAsync(AMAZON_UPLOAD_URL, payload); if (!response.IsSuccessStatusCode) { throw new Exception("Error while upload to Amazon S3"); } return(amazonFile); }