Restsharp: RestRequest.AddFile não funciona

Criado em 1 nov. 2010  ·  13Comentários  ·  Fonte: restsharp/RestSharp

parece que adicionar arquivo ao RestRequest não funciona.

ResponseStatus é definido como Erro.

a mensagem response.Error é "Bytes a serem gravados no fluxo excedem o tamanho de bytes Content-Length especificado."

tem que atualizar o comprimento do conteúdo antes de gravar no fluxo.

bug

Comentários muito úteis

Esta foi a minha solução para contornar este 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
});   

Todos 13 comentários

muito provavelmente as alterações em Content-Length para contornar o .NET não foram testadas com arquivos e o cabeçalho não foi definido corretamente. obrigado pelo relatório.

tente novamente com as últimas alterações de Jonfuller e diga-me se ainda não está funcionando

Eu acredito que isso está resolvido. por favor teste e notifique se não.

Problema retornado.
Na versão 105.2.3 (atualmente estável no nuget) com tamanho de arquivo de ~ 3,5 MB.

Depois de fazer o downgrade para 105.1.0, tudo funciona bem.

Há um post semelhante

Acho que isso está relacionado a outro bug # 769 e # 742, deixe-me consertá-lo e veremos o que acontece. Algo aconteceu com o comprimento do conteúdo.

Alguma novidade sobre isso?

colisão - parece ainda ser um problema

Sim, eu também tenho problemas com isso, mesmo voltar para 105.1.0 não ajudou

Ainda não resolvido.

Estou tendo um problema semelhante com as versões mais recentes do restsharp
ao usar
req.AddFile ("chamar [imagens_atributos] [arquivo]", (s) => imageStream.CopyTo (s), GetRandomFileName ("jpg"), "imagem / jpeg");

Não funciona nas versões mais recentes

mas se eu usar
req.AddFile ("chamar [imagem_atributos] [arquivo]", imageStream.GetBytes (), GetRandomFileName ("jpg"), "imagem / jpeg");

com

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

funciona.

então, usar um stream usando imageStream.CopyTo não funciona enquanto o envio de byte [] funciona

Esta foi a minha solução para contornar este 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
});   

O RestRequest.AddFile não está pronto para o .NET Core? Vejo que há uma diretiva de compilador #if FRAMEWORK em torno dos métodos AddFile na interface. Acho que a solução alternativa @bcabrera poderia funcionar para meu caso de uso, mas o teste de unidade seria um desafio.

Ainda não existe uma versão para o .NET Core. Veja os problemas em aberto para monitorar o progresso.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

AlexanderSchoenfeld picture AlexanderSchoenfeld  ·  3Comentários

thomasd3 picture thomasd3  ·  5Comentários

ChenJasonGit picture ChenJasonGit  ·  5Comentários

vDeggial picture vDeggial  ·  6Comentários

mjwsteenbergen picture mjwsteenbergen  ·  5Comentários