首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HttpResponseMessage.Content.ReadAsStreamAsync():使用HttpClient时限制响应(下载的文件)大小

HttpResponseMessage.Content.ReadAsStreamAsync():使用HttpClient时限制响应(下载的文件)大小
EN

Stack Overflow用户
提问于 2013-12-18 17:37:46
回答 2查看 4.5K关注 0票数 2

我正在寻找一种控制下载文件大小的方法,同时使用以下代码:

代码语言:javascript
复制
    var client = new HttpClient();

    HttpResponseMessage resp = await client.GetAsync(mediaUri, HttpCompletionOption.ResponseHeadersRead);

    using (var fileStream = File.Create(outputPath))
    {
        using (var httpStream = await resp.Content.ReadAsStreamAsync())
        {
            httpStream.CopyTo(fileStream);
            fileStream.Flush();
        }
    }

如何防止下载比预定义大小更大的文件?

编辑:

在下面的答案出现之前,我用这个代替了CopyTo。我把它放在这里,也许是为了与ProgressMessageHandler相比,答案如下:

代码语言:javascript
复制
            using (var fileStream = File.Create(outputPath))
            {
                using (var httpStream = await resp.Content.ReadAsStreamAsync())
                {
                    // instead of httpStream.CopyToAsync(fileStream);
                    byte[] buffer = new byte[65536];
                    while (true)
                    {
                        int read = await httpStream.ReadAsync(buffer, 0, buffer.Length, ct);
                        if (read <= 0)
                            break;

                        // do the policing here

                        await fileStream.WriteAsync(buffer, 0, read);
                    }
                    fileStream.Flush();
                }
            }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-18 20:20:14

如果理查德的答案没有帮助,因为内容是块的,那么您应该查看ProgressMessageHandler,它是WebAPI.Client nuget的一部分,它定期接收事件,并允许您监视传输的字节。使用此事件处理程序,如果传输的字节超过一定数量,则可以取消该操作。

票数 2
EN

Stack Overflow用户

发布于 2013-12-18 19:15:47

尝试检查 property,它应该包含文件的大小(以字节为单位)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20664793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档