【问题标题】:How do I resume large file downloads, and obtain download progress using the ServiceStack client?如何恢复大文件下载,并使用 ServiceStack 客户端获取下载进度?
【发布时间】:2014-05-08 17:23:52
【问题描述】:

我有一个 ServiceStack 客户端,它调用一个服务,该服务返回一个 100MB 到 10GB 的大数据文件。目前,此客户端使用Stream.CopyTo 方法在 LAN 上完美运行以保存到文件。

当客户端通过 WAN(除了通过 LAN)运行时,如果客户端停止或失去连接,则恢复下载以及查看进度的能力变得很重要。

该服务支持发送部分文件,但我不清楚如何在 ServiceStack 客户端中支持这一点,或者即使它是内置的,我也没有意识到。

另外,stream 上的 CopyTo 方法复制到另一个 stream 不会报告其进度,因此对于大文件,它可能需要几个小时,而您无法知道它的进度。我看过关于报告进度的CopyFrom 方法的帖子,但我在我正在使用的课程的任何地方都找不到。

我的环境是最新版本的 ServiceStack 和 Mac OS X 上的最新版本 Mono 和 Windows 上的 .NET 4.5。

能够同时下载不同段的文件是理想的,但能够恢复下载将是一个巨大的帮助。

有人可以指出在 ServiceStack 客户端中执行此操作的最佳方法吗?我发现的大多数示例仅适用于普通的 Web 客户端,并且非常老旧,因此想看看使用 dotnet 和 mono 的更高版本以及 ServiceStack 的最佳方法是什么。

如果可能的话,一个基本的例子会是完美的。

【问题讨论】:

    标签: c# servicestack resume-download


    【解决方案1】:

    ServiceStack 支持 Partial Content Responses 用于返回的服务:

    物理文件

    return new HttpResult(new FileInfo(filePath), request.MimeType); 
    

    记忆流

    return new HttpResult(ms, "audio/mpeg");
    

    原始文本

    return new HttpResult(customText, "text/plain");
    

    通过 ServiceStack 提供的静态文件

    部分内容也可用于直接通过 ServiceStack 提供的静态文件下载,让您可以流式传输 mp3 下载,或者您是否想要静态 .html、.css、.js 等。

    Http Utils

    有关如何使用 ServiceStack's built-in HTTP Utils 请求部分下载的示例,请参阅 PartialContentResultTests.cs

    【讨论】:

    • 服务器端已全部处理并正常工作,因此它只是客户端。如果我理解正确,我应该使用 http utils GetBytesFromUrl 方法和单元测试的标头将小块放入内存,然后将它们写出来。如果是这种情况,那么我将在包装类上工作以做到这一点,我将在任何地方重复使用。
    猜你喜欢
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 2017-05-17
    • 2013-06-26
    相关资源
    最近更新 更多