public string UploadToImgur(MemoryStream ms, int width, int height)
{
byte[] writeData;
if (this.authenticated)
writeData = Encoding.ASCII.GetBytes("image=" + LongDataEscape(Convert.ToBase64String(ms.ToArray())));
else
writeData = Encoding.ASCII.GetBytes("key=" + imgurApiKey + "&image=" + LongDataEscape(Convert.ToBase64String(ms.ToArray())));
this.ProgressBar.Start("Imgur", writeData.Length);
HttpWebRequest req = null;
string url = "";
try {
if (this.authenticated)
req = this.oauth.AuthenticatedWebRequest("https://" + "api.imgur.com/2/upload.xml");
else
req = (HttpWebRequest)HttpWebRequest.Create("https://" + "api.imgur.com/2/upload.xml");
req.Proxy = this.GetProxy();
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = writeData.Length;
req.UserAgent = "ClipUpload 3/clipupload.net";
Stream stream = req.GetRequestStream();
ms.Dispose();
ms = new MemoryStream(writeData);
int sr = 1024;
for (int i = 0; i < ms.Length; i += 1024) {
if (ms.Length - i < 1024)
sr = (int)ms.Length - i;
else
sr = 1024;
byte[] buffer = new byte[sr];
ms.Seek((long)i, SeekOrigin.Begin);
ms.Read(buffer, 0, sr);
stream.Write(buffer, 0, sr);
if (this.ProgressBar.Canceled) {
req.Abort();
ms.Dispose();
req = null;
ms = null;
return "CANCELED";
}
this.ProgressBar.Set(i);
}
WebResponse response = req.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string result = reader.ReadToEnd();
if (result.Contains("<original>http")) {
url = GetBetween(result, "<original>", "</original>");
if (width != -1)
this.AddLog(url, width + " x " + height);
else
this.AddLog(url, (ms.Length / 1000) + " kB");
}
} catch (Exception ex) {
this.Debug("UploadToImgur threw " + ex.GetType().FullName + ": '" + ex.Message + "'");
}
this.ProgressBar.Done();
return url;
}