public async Task<HttpResponseMessage> PostFileAsync(string url, SortedDictionary<string, string> parameters, string fileName, string fileContentsKey, byte[] fileContents = null, Stream srImageStream = null)
{
if (TwitterCredentials == TwitterCredentials.Null || TwitterCredentials.Valid == false)
throw new ArgumentException("TwitterCredentials must be specified and validated");
if (fileContents == null && srImageStream == null)
{
throw new ArgumentException("FileContents must have something actually in them.");
}
var oauth1aAuthheader = BuildAuthenticatedResult(url, parameters, "POST", multipartform: true);
var handler = new HttpClientHandler();
if (handler.SupportsAutomaticDecompression)
{
handler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
}
var client = new HttpClient(handler);
client.DefaultRequestHeaders.ExpectContinue = false;
client.DefaultRequestHeaders.Add("Authorization", oauth1aAuthheader.Header);
client.DefaultRequestHeaders.Add("User-Agent", TwitterApi.UserAgent());
var data = new MultipartFormDataContent();
if (parameters.Count > 0)
{
foreach (var parameter in parameters)
{
var statusData = new StringContent(parameter.Value);
statusData.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "\"" + parameter.Key + "\""
};
data.Add(statusData);
}
}
var filedata = FileDataContent(fileContents, srImageStream);
filedata.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
filedata.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
FileName = "\"" + fileName + "\"",
Name = "\"" + fileContentsKey + "\"",
};
data.Add(filedata);
var download = client.PostAsync(url, data).ToObservable().Timeout(TimeSpan.FromSeconds(waitTimeoutSeconds));
var clientdownload = await download;
return clientdownload;
}