如何使用ServiceStack客户端恢复大文件下载并获取下载进度?

时间:2014-05-08 17:23:52

标签: c# servicestack resume-download

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

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

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

CopyTo上要复制到另一个stream的{​​{1}}方法也不会报告其进度,因此对于大文件,它可能需要数小时才能告知其进度。我看过有关报告进度的stream方法的帖子,但我无法在我正在使用的课程中找到它。

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

能够在不同细分的文件上进行并发下载是理想的,但只是能够恢复下载将是一个巨大的帮助。

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

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

1 个答案:

答案 0 :(得分:2)

对于返回的服务,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

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