Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Migration von WebClient zu HttpClient: Bildupload liefert mit HttpClient ein leeres Bild
Duesmannr
myCSharp.de - Member



Dabei seit:
Beiträge: 122
Herkunft: Münster

Themenstarter:

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

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Duesmannr am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15520
Herkunft: BW

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Duesmannr
myCSharp.de - Member



Dabei seit:
Beiträge: 122
Herkunft: Münster

Themenstarter:

beantworten | zitieren | melden

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

Es gibt keine API Dokumentation.
Der Image Hoster ist der hier.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15520
Herkunft: BW

beantworten | zitieren | melden

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"
private Nachricht | Beiträge des Benutzers
Duesmannr
myCSharp.de - Member



Dabei seit:
Beiträge: 122
Herkunft: Münster

Themenstarter:

beantworten | zitieren | melden

Zitat von Abt
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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15520
Herkunft: BW

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15520
Herkunft: BW

beantworten | zitieren | melden

PS: kurz gegoogelt. Die Webseite bietet sehr wohl eine API; wenn auch sehr rudimentär.
https://www.directupload.net/api/upload.php
private Nachricht | Beiträge des Benutzers
Duesmannr
myCSharp.de - Member



Dabei seit:
Beiträge: 122
Herkunft: Münster

Themenstarter:

beantworten | zitieren | melden

Zitat von Abt
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.
private Nachricht | Beiträge des Benutzers