Das hochladen eines Bildes mit C# und WebRequest?

Hier ist der funktionierende code in Python (mit cURL):

#!/usr/bin/python

import pycurl

c = pycurl.Curl()
values = [
          ("key", "YOUR_API_KEY"),
          ("image", (c.FORM_FILE, "file.png"))]
# OR:     ("image", "http://example.com/example.jpg"))]
# OR:     ("image", "BASE64_ENCODED_STRING"))]

c.setopt(c.URL, "http://imgur.com/api/upload.xml")
c.setopt(c.HTTPPOST, values)

c.perform()
c.close()

Hier ist, was ich in C#:

public void UploadImage()
    {
        //I think this line is doing something wrong.
        //byte[] x = File.ReadAllBytes(@"C:\Users\Sergio\documents\visual studio 2010\Projects\WpfApplication1\WpfApplication1\Test\hotness2.jpg");

        //If I do it like this, using a direct URL everything works fine.
        string parameters = @"key=1b9189df79bf3f8dff2125c22834210903&image=http://static.reddit.com/reddit.com.header.png"; //Convert.ToBase64String(x);
        WebRequest webRequest = WebRequest.Create(new Uri("http://imgur.com/api/upload"));

        webRequest.ContentType = "application/x-www-form-urlencoded";
        webRequest.Method = "POST";
        byte[] bytes = Encoding.ASCII.GetBytes(parameters);

        Stream os = null;
        try
        { //send the Post
            webRequest.ContentLength = bytes.Length;   //Count bytes to send
            os = webRequest.GetRequestStream();
            os.Write(bytes, 0, bytes.Length);         //Send it
        }
        catch (WebException ex)
        {
            MessageBox.Show(ex.Message, "HttpPost: Request error");

        }
        finally
        {
            if (os != null)
            {
                os.Close();
            }
        }

        try
        { //get the response
            WebResponse webResponse = webRequest.GetResponse();

            StreamReader sr = new StreamReader(webResponse.GetResponseStream());
            MessageBox.Show(sr.ReadToEnd().Trim());
        }
        catch (WebException ex)
        {
            MessageBox.Show(ex.Message, "HttpPost: Response error");                  
        }            

    }

Nun, die Dinge, die mir aufgefallen ist, dass wenn ich habe meinen API-key in den Parametern string "239231" oder was auch immer Nummer, die Antwort, die ich bekam, war: "Invalid API key". Also ich denke, sowas muss man richtig arbeitet.

Ich legte meine richtige API-key und jetzt bekomme ich eine andere Antwort: "Invalid image format. Versuchen Sie den Upload eine JPEG-Bild."

Den service, den ich verwende, akzeptiert nahezu jedes Bild-format, so bin ich mir 100% sicher, der Fehler ist in der Art, wie ich bin das senden der Datei. Kann jemand etwas Licht?

BEARBEITEN!!!

Es stellt sich heraus, wenn ich lade ein JPG-Bild habe ich bekommen, dass die graue box Sache. Wenn ich hochladen ein großes jpg-Bild, das ich bekomme gar nichts. Zum Beispiel: http://i.imgur.com/gFsUY.jpg

Wenn ich PNG ' s hochladen, wird das Bild hochgeladen zeigt noch lange nicht.

Ich bin mir sicher, das Problem ist die Codierung. Was kann ich tun?

EDIT 2!!!

Nun bin ich mir 100% sicher, dass das problem liegt in der ersten Zeile der Methode. Die Datei.ReadAllBytes() muss etwas falsch machen. Wenn ich hochladen eine URL-Datei, jeder arbeitet peachy: http://imgur.com/sVH61.png

Ich Frage mich, welche Codierung ich nehmen sollte. :S

Verwenden Sie ein tool wie Fiddler, um zu sehen, wie die Daten Geschrieben, wenn der code führt von Python. Und, sehen Sie, wie die Anfrage gesendet wird alongwith Daten, wenn Sie fertig aus .net. Das sollte helfen, finden Sie den Unterschied & korrigieren Sie später.

InformationsquelleAutor Sergio Tapia | 2010-01-11

Schreibe einen Kommentar