public string UploadPicture(Stream stream, string filename, string title, string description, string tags, bool isPublic, bool isFamily, bool isFriend, ContentType contentType, SafetyLevel safetyLevel, HiddenFromSearch hiddenFromSearch) { var parameters = new Dictionary <string, string>(); if (!string.IsNullOrEmpty(title)) { parameters.Add("title", title); } if (!string.IsNullOrEmpty(description)) { parameters.Add("description", description); } if (!string.IsNullOrEmpty(tags)) { parameters.Add("tags", tags); } parameters.Add("is_public", isPublic ? "1" : "0"); parameters.Add("is_friend", isFriend ? "1" : "0"); parameters.Add("is_family", isFamily ? "1" : "0"); if (safetyLevel != SafetyLevel.None) { parameters.Add("safety_level", safetyLevel.ToString("D")); } if (contentType != ContentType.None) { parameters.Add("content_type", contentType.ToString("D")); } if (hiddenFromSearch != HiddenFromSearch.None) { parameters.Add("hidden", hiddenFromSearch.ToString("D")); } FlickrResponder.OAuthGetBasicParameters(parameters); parameters.Add("oauth_consumer_key", ApiKey); parameters.Add("oauth_token", OAuthAccessToken); parameters.Add("oauth_signature", OAuthCalculateSignature("POST", UploadUrl, parameters, OAuthAccessTokenSecret)); var boundary = FlickrResponder.CreateBoundary(); var data = FlickrResponder.CreateUploadData(stream, filename, parameters, boundary); var oauthHeader = FlickrResponder.OAuthCalculateAuthHeader(parameters); var contentTypeHeader = "multipart/form-data; boundary=" + boundary; var response = FlickrResponder.UploadData(UploadUrl, data, contentTypeHeader, oauthHeader); var match = Regex.Match(response, "<photoid>(\\d+)</photoid>"); if (match.Success) { return(match.Groups[1].Value); } using (var reader = XmlReader.Create(new StringReader(response), new XmlReaderSettings { IgnoreWhitespace = true })) { if (!reader.ReadToDescendant("rsp")) { throw new XmlException("Unable to find response element 'rsp' in Flickr response"); } while (reader.MoveToNextAttribute()) { if (reader.LocalName == "stat" && reader.Value == "fail") { throw ExceptionHandler.CreateResponseException(reader); } } } throw new FlickrException("Unable to determine photo id from upload response: " + response); }