public string UploadImage(Object obj, TaskScheduler ts, string fileName, int albumNumber = 0, NotifyUpload method = null) { string albumHref = ""; string uploadedUrl = ""; long fileSize; albumHref = (Albums.Count == 0 || albumNumber == 0) ? PhotosHref : Albums[albumNumber - 1].href + "photos/"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(albumHref); request.Credentials = CredentialCache.DefaultCredentials; request.Headers["Authorization"] = "OAuth " + mysettings.OAuthToken; request.ContentType = "image/jpeg"; request.Method = "POST"; try { using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { request.ContentLength = fs.Length; fileSize = fs.Length; using (Stream dataStream = request.GetRequestStream()) { long uploaded = 0; using (BinaryReader br = new BinaryReader(fs)) { byte[] buffer = br.ReadBytes(BufferSize); while (buffer.Length > 0) { uploaded += buffer.Length; if (method != null) { Task.Factory.StartNew(() => method.Invoke(obj, (int)(uploaded / (float)fileSize * 100)), CancellationToken.None, TaskCreationOptions.None, ts); } dataStream.Write(buffer, 0, buffer.Length); buffer = br.ReadBytes(BufferSize); } br.Close(); } //dataStream.Close(); } fs.Close(); } using (WebResponse response = request.GetResponse()) { string status = ((HttpWebResponse)response).StatusDescription; if (((HttpWebResponse)response).StatusCode != HttpStatusCode.Created) { return(null); } using (Stream responseStream = response.GetResponseStream()) { using (StreamReader reader = new StreamReader(responseStream)) { string result = reader.ReadToEnd(); XmlDocument doc = new XmlDocument(); doc.LoadXml(result); XmlNodeList nodelist = doc.DocumentElement.ChildNodes; foreach (XmlNode item in nodelist) { if (item.Name == "content") { uploadedUrl = item.Attributes["src"].Value; } } reader.Close(); } responseStream.Close(); } response.Close(); } } catch (Exception ex) { Log(string.Format("Upload image from file {0}", fileName), ex.ToString()); } return(uploadedUrl); }
public string UploadImage(Object obj, TaskScheduler ts, Uri fileUrl, int albumNumber = 0, NotifyUpload method = null) { string albumHref; string contentType; string uploadedUrl = ""; byte[] file; long fileSize; albumHref = (Albums.Count == 0 || albumNumber == 0) ? PhotosHref: albumHref = Albums[albumNumber - 1].href + "photos/"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fileUrl); request.Credentials = CredentialCache.DefaultCredentials; request.Method = "GET"; try { using (MemoryStream memoryStream = new MemoryStream()) { BinaryWriter writer = new BinaryWriter(memoryStream); using (WebResponse response = request.GetResponse()) { string status = ((HttpWebResponse)response).StatusDescription; contentType = response.ContentType; if (!contentType.Contains("image") || ((HttpWebResponse)response).StatusCode != HttpStatusCode.OK) { return(null); } fileSize = response.ContentLength; using (Stream responseStream = response.GetResponseStream()) { long uploaded = 0; using (BinaryReader br = new BinaryReader(responseStream)) { byte[] buffer = br.ReadBytes(BufferSize); while (buffer.Length > 0) { uploaded += buffer.Length; writer.Write(buffer); buffer = br.ReadBytes(BufferSize); if (method != null) { Task.Factory.StartNew(() => method.Invoke(obj, fileSize == -1 ? 0 : (int)(uploaded / (float)fileSize * 50)), CancellationToken.None, TaskCreationOptions.None, ts); } } file = memoryStream.GetBuffer(); br.Close(); } responseStream.Close(); } response.Close(); } if (fileSize == -1) { fileSize = memoryStream.Length; } HttpWebRequest requestPost = (HttpWebRequest)WebRequest.Create(albumHref); requestPost.Headers["Authorization"] = "OAuth " + mysettings.OAuthToken; requestPost.ContentType = contentType; requestPost.Method = "POST"; requestPost.ContentLength = fileSize; memoryStream.Position = 0; using (Stream dataStream = requestPost.GetRequestStream()) { long uploaded = 0; using (BinaryReader br = new BinaryReader(memoryStream)) { byte[] buffer = br.ReadBytes(BufferSize); while (buffer.Length > 0) { uploaded += buffer.Length; if (method != null) { Task.Factory.StartNew(() => method.Invoke(obj, 50 + (int)(uploaded / (float)fileSize * 50)), CancellationToken.None, TaskCreationOptions.None, ts); } dataStream.Write(buffer, 0, buffer.Length); buffer = br.ReadBytes(BufferSize); } br.Close(); } dataStream.Close(); } using (WebResponse response = requestPost.GetResponse()) { string status = ((HttpWebResponse)response).StatusDescription; if (((HttpWebResponse)response).StatusCode != HttpStatusCode.Created) { return(null); } using (Stream responseStream = response.GetResponseStream()) { using (StreamReader reader = new StreamReader(responseStream)) { string result = reader.ReadToEnd(); XmlDocument doc = new XmlDocument(); doc.LoadXml(result); XmlNodeList nodelist = doc.DocumentElement.ChildNodes; foreach (XmlNode item in nodelist) { if (item.Name == "content") { uploadedUrl = item.Attributes["src"].Value; } } reader.Close(); } responseStream.Close(); } response.Close(); } memoryStream.Close(); } } catch (Exception ex) { Log("Upload image from URL:" + fileUrl.ToString(), ex.ToString()); } return(uploadedUrl); }