我有一个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。
如果可能,一个基本的例子就是完美的。
答案 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直接提供的静态文件下载中使用,它允许您流式传输mp3下载,或者您是否想要静态.html,.css,.js等。
有关如何使用PartialContentResultTests.cs请求部分下载的示例,请参阅ServiceStack's built-in HTTP Utils。