Laden...

Migration von WebClient zu HttpClient: Bildupload liefert mit HttpClient ein leeres Bild

Erstellt von Duesmannr vor 3 Jahren Letzter Beitrag vor 3 Jahren 809 Views
D
Duesmannr Themenstarter:in
161 Beiträge seit 2017
vor 3 Jahren
Migration von WebClient zu HttpClient: Bildupload liefert mit HttpClient ein leeres Bild

Nabend,

ich hänge gerade dabei, den WebClient Request zu einem HttpClient Request zu konvertieren.

Der WebClient Request sieht wie folgt aus und funktioniert auch:


string testImagePath = @"Path.png";

            WebClient client = new();

            client.UploadFileCompleted += Client_UploadFileCompleted;

            client.Headers.Add("Content-Type", "binary/octet-stream");
            Uri address = new("API Endpunkt");
            client.UploadFileAsync(address, "POST", testImagePath);

Mein Versuch mit HttpClient sieht wie folgt aus:


string testImagePath = @"Path.png";
            byte[] imageBytes = File.ReadAllBytes(testImagePath);

HttpClient httpClient = new();
            httpClient.DefaultRequestHeaders.Clear();
            httpClient.DefaultRequestHeaders.Accept.Add(new("*/*"));

            ByteArrayContent byteArrayContent = new(imageBytes);
            byteArrayContent.Headers.ContentType = new("binary/octet-stream");

            var resp = await httpClient.PostAsync("API Endpunkt", byteArrayContent);
            var content = await resp.Content.ReadAsStringAsync();

Habt Ihr eine bessere Idee, bzw. was mache ich falsch?

Grüße und schöne Weihnachten 😃

P.S.: Es handelt sich um einem Imagehoster. Die Variante mit dem WebClient liefert lediglich einen String mit der URL zu dem hochgeladenen Foto. Die Variante mit dem HttpClient liefer ebenfalls eine URL zurück, nur wenn ich diesen aufrufe, kommt ein leeres Bild vom Hoster. Quasi "Image not Found" Bild.

16.807 Beiträge seit 2008
vor 3 Jahren

Gib doch den potentiellen Helfern ein wenig mehr Infos zur API.... Name? Docs?

WebClient setzt im Hintergrund sehr viel, was Dir alles im HttpClient fehlt.
Dafür setzt Du im HttpClient Accept-Header, die (hier) bei dem Post völlig egal sind.
Ohne Infos zur API kann man nur raten, was Du brauchst.

Ungewöhnlich ist auch die Verwendung von binary/octet-stream.
Das wird normalerweise als Workaround für den Download von Dateien verwendet; nicht zum Upload.

D
Duesmannr Themenstarter:in
161 Beiträge seit 2017
vor 3 Jahren

Gib doch den potentiellen Helfern ein wenig mehr Infos zur API.... Name? Docs?

Es gibt keine API Dokumentation.
Der Image Hoster ist der hier.

16.807 Beiträge seit 2008
vor 3 Jahren

Die Seite arbeitet mit Content-Type: multipart/form-data; und nicht mit binary/octet-stream.
Sieht man ganz einfach, wenn man im Browser die Developer Tools öffnet.

Auch im HTML Code ist Multipart deklariert.

enctype="multipart/form-data"
D
Duesmannr Themenstarter:in
161 Beiträge seit 2017
vor 3 Jahren

Die Seite arbeitet mit Content-Type: multipart/form-data; und nicht mit binary/octet-stream.

Der WebClient Code Schnipsel kommt aus deren eigenem Uploader Tool.

Ich habe auch schon versucht mit dem HttpClient und dem MultipartFormDataContent den Request zu senden. Aber gleiches Ergebnis wie beschrieben.

16.807 Beiträge seit 2008
vor 3 Jahren

Dann nimm Dir ein Tool wie Fiddler, und schau Dir, was Du tatsächlich an den Endpunkt schickst.
Hab mehrere Vermutungen, dass entweder gewisse Parameter nicht ankommen oder Du den falschen Endpunkt nimmst.

16.807 Beiträge seit 2008
vor 3 Jahren

PS: kurz gegoogelt. Die Webseite bietet sehr wohl eine API; wenn auch sehr rudimentär.
https://www.directupload.net/api/upload.php

D
Duesmannr Themenstarter:in
161 Beiträge seit 2017
vor 3 Jahren

PS: kurz gegoogelt. Die Webseite bietet sehr wohl eine API; wenn auch sehr rudimentär.
https://www.directupload.net/api/upload.php

Das habe ich auch nie verleugnet.
Nur das die keine Dokumentation dafür besitzen bzw. nicht öffentlich ist.