Restsharp: Téléchargement en plusieurs parties - longueur de contenu incorrecte

Créé le 28 mars 2017  ·  3Commentaires  ·  Source: restsharp/RestSharp

Salut,

J'essaie de faire fonctionner le téléchargement en plusieurs parties avec la v105.2.3, mais il semble qu'il y ait un problème avec Content-Length.

using (FileStream source = File.Open(path, FileMode.Open))
{
    RestSharp.RestRequest request2 = new RestSharp.RestRequest();
    request.Resource = $"/files/uploads/{UploadId}";
    request.Method = Method.POST;
    request.AddFile(filename, source.CopyTo, filename);
    request.AlwaysMultipartFormData = true;

    IRestResponse<UploadResponse> response2 = this.Client.Execute<UploadResponse>(request);
    if ((int)response2.StatusCode != 201)
    {
        throw new Exception(response2.StatusDescription);
    }
}

La réponse2 a ce message d'erreur (il est en allemand et signifie que la demande a été annulée.):
_Die Anfrage wurde abgebrochen: Die Anfrage wurde abgebrochen.._

Exception interne (Impossible de fermer le flux tant que tous les octets ne sont pas écrits) :
_Stream kann nicht geschlossen werden, bevor alle Bytes geschrieben wurden._

Dans Fiddler, j'obtiens ceci:

Demande - Entité

Content-Length: 210
Content-Type: multipart/form-data; boundary=-----------------------------28947758029299

Réponse

HTTP/1.1 408 Request body incomplete
The request body did not contain the specified number of bytes. Got 159, expected 210

J'ai besoin d'utiliser le package Nuget avec ces versions car j'ai d'autres packages (comme RestSharp.Newtonsoft.Json) qui nécessitent cette version.
On dirait le même problème ici :
https://github.com/restsharp/RestSharp/issues/742

Meilleures salutations,
Alexis

Commentaire le plus utile

J'ai eu ce même problème et je l'ai résolu en utilisant la méthode request.Files.Add() au lieu de AddFile() comme ceci :

                request.Files.Add(new FileParameter
                {
                    Name = "fileAttach",
                    Writer = (s) =>
                    {
                        FileStream stream = File.Open(_attachment.path, FileMode.Open);
                        stream.CopyTo(s);
                        stream.Dispose();
                    },
                    FileName = _attachment.name,
                    ContentType = _attachment.contentType,
                    ContentLength = _attachment.size
                });

Tous les 3 commentaires

Salut Alex,

J'ai le même problème. L'avez-vous résolu ou contourné ?

Meilleures salutations,
Maurice

J'ai eu ce même problème et je l'ai résolu en utilisant la méthode request.Files.Add() au lieu de AddFile() comme ceci :

                request.Files.Add(new FileParameter
                {
                    Name = "fileAttach",
                    Writer = (s) =>
                    {
                        FileStream stream = File.Open(_attachment.path, FileMode.Open);
                        stream.CopyTo(s);
                        stream.Dispose();
                    },
                    FileName = _attachment.name,
                    ContentType = _attachment.contentType,
                    ContentLength = _attachment.size
                });

Vous pouvez utiliser AddFile mais vous devez spécifier la longueur du contenu, il existe un paramètre pour cela.

Cette page vous a été utile?
0 / 5 - 0 notes