没有内置的分块。您将需要自己实现它。它应该很简单。
像下面这样的一些界面应该可以解决问题:
Guid GetFile(string filename);
Guid GetFile(string filename, out int chunkCount);
byte[] GetFileChunk(Guid id, int chunkIndex);
当GetFile()
被调用时,服务器可以将文件“缓存”在作为密钥的Dictionary<>
a中。Guid
然后Guid
可以将其返回给客户端,以便它可以进一步请求下载文件的实际块。
GetFileChunk()
如果 chunkIndex 超过该 Guid / 文件的块数,则应返回 null。
块的大小由您决定。您可以在响应能力和性能之间做出选择。块越大,性能就越好。但是,如果您要更新 GUI 上的进度条或其他内容,那么“响应性”当然会受到不利影响。尝试尝试最有效的方法。
替代接口可能类似于:
Guid GetFile(string filename, out ulong numOfBytes);
byte[] GetFileData(Guid id, ulong index, ulong count);
这意味着客户端可以决定它希望下载的块的大小。然后你可以实施某种扩展策略。