Example #1
0
        public override void PostBlogMessage(BlogPostObject blogPostObject)
        {
            #region Argument check

            //Check for empty path, mandatory for twitpic
            if (string.IsNullOrEmpty(blogPostObject.Filename))
            {
                OnErrorOccured(new BlogServiceEventArgs(BlogServiceErrorLevel.Failed, ERROR_UPLOAD_FAILED, ""));
            }

            //Check for empty credentials
            if (string.IsNullOrEmpty(blogPostObject.Username) ||
                string.IsNullOrEmpty(blogPostObject.Password))
            {
                OnErrorOccured(new BlogServiceEventArgs(BlogServiceErrorLevel.Failed, ERROR_UPLOAD_FAILED, ""));
            }

            //Message is mandatory for a blog post
            if (string.IsNullOrEmpty(blogPostObject.Message))
            {
                OnErrorOccured(new BlogServiceEventArgs(BlogServiceErrorLevel.Failed, ERROR_UPLOAD_FAILED, ""));
            }

            #endregion

            using (FileStream file = new FileStream(blogPostObject.Filename, FileMode.Open, FileAccess.Read))
            {
                try
                {
                    //Load the picture data
                    byte[] incoming = new byte[file.Length];
                    file.Read(incoming, 0, incoming.Length);

                    blogPostObject.MediaData = incoming;
                    XmlDocument uploadResult = UploadPicture(API_UPLOAD_POST, blogPostObject);

                    if (uploadResult.SelectSingleNode("rsp").Attributes["stat"].Value == "fail")
                    {
                        string ErrorText = uploadResult.SelectSingleNode("//err").Attributes["msg"].Value;
                        OnErrorOccured(new BlogServiceEventArgs(BlogServiceErrorLevel.Failed, ErrorText, ""));
                    }
                    else
                    {
                        string URL = uploadResult.SelectSingleNode("//mediaurl").InnerText;
                        OnUploadFinish(new BlogServiceEventArgs(BlogServiceErrorLevel.OK, URL, "", blogPostObject.Filename));
                    }
                    
                }
                catch (Exception)
                {
                    OnErrorOccured(new BlogServiceEventArgs(BlogServiceErrorLevel.Failed, "", "Failed to upload picture to TwitPic."));
                }
            }
        }
Example #2
0
 public abstract void PostBlogMessage(BlogPostObject blogPostObject);
Example #3
0
        private XmlDocument UploadPicture(string url, BlogPostObject bpo)
        {
            try
            {
                HttpWebRequest request = WebRequestFactory.CreateHttpRequest(url);

                string boundary = System.Guid.NewGuid().ToString();
                request.Credentials = new NetworkCredential(bpo.Username, bpo.Password);
                request.Headers.Add("Accept-Language", "cs,en-us;q=0.7,en;q=0.3");
                request.PreAuthenticate = true;
                request.ContentType = string.Format("multipart/form-data;boundary={0}", boundary);

                //request.ContentType = "application/x-www-form-urlencoded";
                request.Method = "POST";
                request.Timeout = 20000;
                string header = string.Format("--{0}", boundary);
                string ender = "\r\n" + header + "\r\n";

                StringBuilder contents = new StringBuilder();

                contents.Append(CreateContentPartString(header, "username", bpo.Username));
                contents.Append(CreateContentPartString(header, "password", bpo.Password));
                contents.Append(CreateContentPartString(header, "source", "pocketwit"));
                contents.Append(CreateContentPartString(header, "message", bpo.Message));

                contents.Append(CreateContentPartMedia(header, "media", MediaIdentifier.JPG));

                //Create the form message to send in bytes
                byte[] message = Encoding.UTF8.GetBytes(contents.ToString());
                byte[] footer = Encoding.UTF8.GetBytes(ender);
                request.ContentLength = message.Length + bpo.MediaData.Length + footer.Length;
                using (Stream requestStream = request.GetRequestStream())
                {
                    requestStream.Write(message, 0, message.Length);
                    requestStream.Write(bpo.MediaData, 0, bpo.MediaData.Length);
                    requestStream.Write(footer, 0, footer.Length);
                    requestStream.Flush();
                    requestStream.Close();

                    using (WebResponse response = request.GetResponse())
                    {
                        using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                        {
                            XmlDocument responseXML = new XmlDocument();
                            responseXML.LoadXml(reader.ReadToEnd());
                            return responseXML;
                        }
                    }
                }

            }
            catch (Exception)
            {
                //Socket exception 10054 could occur when sending large files.
                OnErrorOccured(new BlogServiceEventArgs(BlogServiceErrorLevel.Failed, "", "Unable to upload picture."));
                return null;
            }
        }