Restsharp: RestRequest.AddFile ne fonctionne pas

Créé le 1 nov. 2010  ·  13Commentaires  ·  Source: restsharp/RestSharp

semble que l'ajout de fichier à RestRequest ne fonctionne pas.

ResponseStatus est défini sur Erreur.

le message response.Error est "Les octets à écrire dans le flux dépassent la taille d'octets Content-Length spécifiée."

devez mettre à jour la longueur du contenu avant d'écrire dans le flux.

bug

Commentaire le plus utile

C'était ma solution pour contourner ce bug:

var req = GetRestRequest("Upload", Method.POST, null);
//req.AddFile("file",
//    (s) => {
//        var stream = input(imageObject);
//        stream.CopyTo(s);
//        stream.Dispose();
//    },
//    fileName, contentType);

req.Files.Add(new FileParameter {
    Name = "file",
    Writer = (s) => {
        var stream = input(imageObject);
        stream.CopyTo(s);
        stream.Dispose();
    },
    FileName = fileName,
    ContentType = contentType,
    ContentLength = contentLength
});   

Tous les 13 commentaires

très probablement, les modifications apportées à Content-Length pour contourner .NET n'ont pas été testées avec des fichiers et l'en-tête n'est pas correctement défini. merci pour le rapport.

réessayez avec les dernières modifications de jonfuller et dites-moi si cela ne fonctionne toujours pas

je crois que c'est résolu. s'il vous plaît tester et notifier si non.

Problème retourné.
Dans la version 105.2.3 (actuellement stable sur nuget) avec une taille de fichier d'environ 3,5 Mo.

Après avoir rétrogradé à 105.1.0, tout fonctionne bien.

Il y a un post similaire

Je pense que cela est lié à un autre bogue #769 et #742, laissez-moi le corriger et nous verrons ce qui se passe. Quelque chose s'est passé avec la longueur du contenu.

Il y a des nouvelles à ce sujet ?

bosse - semble toujours être un problème

oui, j'ai aussi des problèmes avec ça, même revenir à 105.1.0 n'a pas aidé

Toujours pas résolu.

J'ai un problème similaire avec les nouvelles versions de restsharp
lors de l'utilisation
req.AddFile("call[picture_attributes][file]", (s) => imageStream.CopyTo(s), GetRandomFileName("jpg"), "image/jpeg");

Cela ne fonctionne pas dans les versions plus récentes

mais si j'utilise
req.AddFile("call[picture_attributes][file]", imageStream.GetBytes(), GetRandomFileName("jpg"), "image/jpeg");

avec

    public static byte[] GetBytes(this Stream s)
    {
        using (var ms = new MemoryStream())
        {
            s.CopyTo(ms);
            return ms.ToArray();
        }
    }

Ça marche.

donc utiliser un flux en utilisant imageStream.CopyTo ne fonctionne pas lors de l'envoi de byte[] fonctionne

C'était ma solution pour contourner ce bug:

var req = GetRestRequest("Upload", Method.POST, null);
//req.AddFile("file",
//    (s) => {
//        var stream = input(imageObject);
//        stream.CopyTo(s);
//        stream.Dispose();
//    },
//    fileName, contentType);

req.Files.Add(new FileParameter {
    Name = "file",
    Writer = (s) => {
        var stream = input(imageObject);
        stream.CopyTo(s);
        stream.Dispose();
    },
    FileName = fileName,
    ContentType = contentType,
    ContentLength = contentLength
});   

RestRequest.AddFile n'est-il pas prêt pour .NET Core ? Je vois qu'il existe une directive de compilateur #if FRAMEWORK autour des méthodes AddFile sur l'interface. Je pense que la solution de contournement @bcabrera pourrait fonctionner pour mon cas d'utilisation, mais le test unitaire serait un défi.

Il n'y a pas encore de version pour .NET Core. Consultez les problèmes ouverts pour suivre les progrès.

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

Questions connexes

ghd258 picture ghd258  ·  6Commentaires

mwinder picture mwinder  ·  7Commentaires

captnrob picture captnrob  ·  3Commentaires

maximuss picture maximuss  ·  3Commentaires

nilsga picture nilsga  ·  5Commentaires