[C# WinForms] SeaFile FileUpload Bad Request 402

larud

Cadet 3rd Year
Registriert
Apr. 2020
Beiträge
39
Hi zusammen,

ich schreibe zur Zeit ein kleines Programm, dass eine zip Datei in ein SeaFile Repository uploaden soll und einen Download Link mit Passwort erstellt. In der Doki sind die Wege mit cURL beschrieben und sowas klappt das meiste auch gut.

Ich nutze dazu die HttpClient Klasse und kann auch problemlos den Token abrufen, die AccountInfo und das Default Repo sowie alle meine Repos holen... Nur beim Fileupload bekomme ich durchgehend einen Bad Request und weiß leider nicht weiter.

Der "uploadLink" wird vorher, wie es unter https://download.seafile.com/published/web-api/v2.1/file-upload.md beschrieben ist, abgerufen. An diesen sollte dann ja der request zum Upload gehen.

Als Basis für den Code hatte ich mir habe ich mir die cURL zu c# konvertiert (https://curl.olsh.me/)

C#:
public static async Task<string> UploadFileAsync(string token, string uploadLink, string filePath)

         {

             using (var httpClient = new HttpClient())
             {
                 using (var request = new HttpRequestMessage(new HttpMethod("POST"), new Uri(uploadLink)))
                 {
                     try
                     {
                         request.Headers.TryAddWithoutValidation("Authorization", "Token " + token);
                         var multipartContent = GetMultipartFormDataContentWithFixedBoundary();
                         multipartContent.Add(new ByteArrayContent(File.ReadAllBytes(filePath)), "file", Path.GetFileName(filePath));
                         multipartContent.Add(new StringContent("/TestOrdner/"), "parent_dir");

                         request.Content = multipartContent;
                         HttpResponseMessage response = await httpClient.SendAsync(request);


                         if (response.IsSuccessStatusCode) return await response.Content.ReadAsStringAsync();
                         else MessageBox.Show($"{response.StatusCode} - {response.ReasonPhrase}");
                     }
                     catch (Exception e)
                     {
                         throw e;
                     }
                     return null;
                 }
             }
         }


GetMultipartFormDataContentWithFixedBoundary() entfernt die Anführungszeichen die wohl fälschlicherweise von der Klasse um das boundary gelegt werden. Hier dachte ich, würde der Fehler eigentlich liegen... Leider hat es das aber nicht gelöst...


C#:
private static MultipartFormDataContent GetMultipartFormDataContentWithFixedBoundary()
          {
             var multipartContent = new MultipartFormDataContent();

             var boundary = multipartContent.Headers.ContentType.Parameters.First(o => o.Name == "boundary");
             boundary.Value = boundary.Value.Replace("\"", string.Empty);
             multipartContent.Headers.Remove("Content-Type");
             multipartContent.Headers.TryAddWithoutValidation("Content-Type", "multipart/form-data; boundary=" + boundary.Value);
             return multipartContent;
         }




Ich habe leider noch nicht viel Erfahrung mit dem httpClient oder mit Web. Vielleicht hat ja jemand mehr Erfahrung und hat einen Rat.

Danke

VG
larud
 
  • Gefällt mir
Reaktionen: larud

Ähnliche Themen

Antworten
3
Aufrufe
1.362
Zurück
Oben