Restsharp: RestRequest.AddFile 不起作用

创建于 2010-11-01  ·  13评论  ·  资料来源: restsharp/RestSharp

似乎向 RestRequest 添加文件不起作用。

ResponseStatus 设置为错误。

response.Error 消息是“要写入流的字节数超过了指定的 Content-Length 字节大小。”

在写入流之前必须更新内容长度。

最有用的评论

这是我解决此错误的解决方案:

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
});   

所有13条评论

很可能对 Content-Length 的更改以解决 .NET 的问题没有使用文件进行测试,并且标头设置不正确。 谢谢你的报告。

使用 jonfuller 的最新更改再次尝试此操作,并告诉我它是否仍然无法正常工作

我相信这会得到解决。 如果没有,请测试并通知。

问题返回。
在版本 105.2.3(目前在 nuget 上稳定)中,文件大小约为 3.5MB。

降级到 105.1.0 后一切正常。

StackOverflow 上有一个类似的

我认为这与另一个错误 #769 和 #742 相关,让我修复它,我们会看看会发生什么。 内容长度发生了一些事情。

有这方面的消息吗?

凹凸 - 似乎仍然是一个问题

是的,我也有这个问题,即使回到 105.1.0 也没有帮助

还是没有解决。

我在使用较新版本的 restsharp 时遇到了类似的问题
使用时
req.AddFile("call[picture_attributes][file]", (s) => imageStream.CopyTo(s), GetRandomFileName("jpg"), "image/jpeg");

它不适用于较新的版本

但如果我使用
req.AddFile("call[picture_attributes][file]", imageStream.GetBytes(), GetRandomFileName("jpg"), "image/jpeg");

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

有用。

因此,通过使用 imageStream.CopyTo 使用流在发送 byte[] 时不起作用

这是我解决此错误的解决方案:

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 还没有准备好用于 .NET Core 吗? 我看到接口上的 AddFile 方法周围有一个 #if FRAMEWORK 编译器指令。 我认为@bcabrera解决方法适用于我的用例,但单元测试将是一个挑战。

.NET Core 目前还没有版本。 查看未解决的问题以监控进度。

此页面是否有帮助?
0 / 5 - 0 等级