通过 AshX 处理程序支持可恢复的 HTTP 下载?
我们通过 ASP.NET 中的 ASHX 处理程序提供应用程序设置的下载。
一位客户告诉我们,他使用一些第三方下载管理器应用程序,而我们提供文件的方式当前不支持他的下载管理器应用程序的“恢复”功能。
我的问题是:
恢复下载背后的基本思想是什么?是否有某个 HTTP GET 请求告诉我起始偏移量?
We are providing downloads of our application setups through an ASHX handler in ASP.NET.
A customer told us he uses some third party download manager application and that our way of providing the files currently does not support the "resume" feature of his download manager application.
My questions are:
What are the basic ideas behind resuming a download? Is there a certain HTTP GET request that tells me the offset to start at?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
感谢 icktoofay 让我开始,这里有一个完整的示例,可以节省其他开发人员一些时间:
磁盘示例
数据库示例
帮助方法 从磁盘或数据库读取部分文件并作为响应输出的方法,而不是将整个文件加载到内存中,如果下载中途暂停或恢复,则会浪费资源。
编辑:添加了 etag 以在 IE9 中启用可恢复下载,感谢 EricLaw 的帮助,使其在 IE9 中正常工作。
Thanks icktoofay for getting me started, here's a complete example to save other developers some time:
Disk Example
Database Example
Helper Methods
What this demonstrates is a way of reading part of the file from either the disk or database and outputting as response rather than loading the entire file into memory, which wastes resources if the download is paused or resumed half way through.
Edit: added etag to enable resumable downloads in IE9, thanks to EricLaw for his help in getting it to work correctly in IE9.
恢复下载通常通过 HTTP
Range
标头进行。例如,如果客户端只需要文件的第二个千字节,它可能会发送标头Range: bytes=1024-2048
。您可以参阅 HTTP/1.1 的 RFC 第 139 页了解更多信息。
Resuming a download usually works through the HTTP
Range
header. For example, if a client wants only the second kilobyte of a file, it might send the headerRange: bytes=1024-2048
.You can see page 139 of the RFC for HTTP/1.1 for more information.