API Fotka upload zdjęć

API Fotka upload zdjęć
D6
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 76
0

Witam, chciałbym spróbować napisać aplikację która byłaby desktopowym klientem fotka.pl

Otóż chciałem teraz dodać możliwość uploadowania zdjęć jednakże cały czas dostaję odpowiedź o błędzie załadowania zdjęcia bez jego numeru czy komunikatu.

oto kod:

Kopiuj
 
        public DodajZdjecie(string sciezka, string hash, string nazwa, string haslo, string numer, string nazwaAlbumu)
        {
            string userName = nazwa;
            string userPassword = haslo;
            authInfo = userName + ":" + userPassword;
            apiurl = "http://api.fotka.pl/upload/put.xml?api.auth_method=httpbasic&source=" + sciezka + "&filehash=" + hash + "&album_nr=" + numer + "&description=test" + "&type=albumy_fotki_dodaj";
        }

        public void upPicture()
        {
            WebRequest request = WebRequest.Create(apiurl);
            request.ContentType = "application/x-www-form-urlencoded";
            authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
            request.Headers["Authorization"] = "Basic " + authInfo;
            try
            {
                WebResponse response = request.GetResponse();
                string status = ((HttpWebResponse)response).StatusDescription + "\r\n";
                Stream dataStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(dataStream);
                string result = reader.ReadToEnd().Trim();
                XmlDocument doc = new XmlDocument();
                doc.InnerXml = result;
                XmlElement root = doc.DocumentElement;
                XmlNodeList powiadomienia = root.SelectNodes("//body");
                foreach (XmlNode powiadomienie in powiadomienia)
                {
                    string body = powiadomienie.InnerText;
                }
            }
            catch (Exception ex)
            {

            }
        }

Tutaj jest dokumentacja i opis tej funkcji api: http://www.fotka.pl/api/upload/put

Na zdrowy rozsądek, dziwne jest dla mnie to że niby wymaga tylko filename, nie wiem jak jest zrobiony proces wysyłania, myślałem że może jest to po stronie api, ale widocznie nie. Czekam na wskazówki. ;)

gawronlukasz
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 51
0

Wydaje mi się, że ten source to nie jest ścieżka tylko raczej bajty obrazka zamienione na Base64, czyli mniej więcej coś takiego

Kopiuj
string source = Convert.ToBase64String(tablicaBajtówObrazka);

Pozdrawiam
Łukasz Gawron

D6
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 76
0

Niestety po zmodyfikowaniu kodu tak by zamiast ścieżki do pliku wysyłał tablicę bajtów dostaję ten sam komunikat.

Kopiuj
 
    class DodajZdjecie
    {
        string apiurl = string.Empty;
        string authInfo = string.Empty;
        byte[] array;

        public DodajZdjecie(string sciezka, string hash, string nazwa, string haslo, string numer, string nazwaAlbumu)
        {
            string userName = nazwa;
            string userPassword = haslo;
            authInfo = userName + ":" + userPassword;
            array = imageToByteArray(System.Drawing.Image.FromFile(sciezka));
            string source = Convert.ToBase64String(array);
            apiurl = "http://api.fotka.pl/upload/put.xml?api.auth_method=httpbasic&source=" + source + "&filehash=" + hash + "&album_nr=" + numer + "&description=test" + "&type=albumy_fotki_dodaj";
        }
    
        public void upPicture()
        {
            WebRequest request = WebRequest.Create(apiurl);
            request.ContentType = "application/x-www-form-urlencoded";
            authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
            request.Headers["Authorization"] = "Basic " + authInfo;
            try
            {
                WebResponse response = request.GetResponse();
                string status = ((HttpWebResponse)response).StatusDescription + "\r\n";
                Stream dataStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(dataStream);
                string result = reader.ReadToEnd().Trim();
                XmlDocument doc = new XmlDocument();
                doc.InnerXml = result;
                XmlElement root = doc.DocumentElement;
                XmlNodeList powiadomienia = root.SelectNodes("//body");
                foreach (XmlNode powiadomienie in powiadomienia)
                {
                    string body = powiadomienie.InnerText;
                }
            }
            catch (Exception ex)
            {

            }
        }

        public byte[] imageToByteArray(System.Drawing.Image imageIn)
        {
            MemoryStream ms = new MemoryStream();
            imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            return ms.ToArray();
        }
    }

A oto komunikat:

Kopiuj
<version><![CDATA[3.1]]></version><module_name><![CDATA[upload]]></module_name><action_name><![CDATA[put]]></action_name><status><![CDATA[error]]></status><reason><![CDATA[]]></reason>
 

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.