ram*_*ram 8 asp.net http file httphandler httpmodule
我试图用ASP.net/C#设计一个这样的系统.
用户付费下载一些内容(文件 - mp3/PDF,doc等).我应该能够跟踪用户下载的字节数.如果下载的字节数与服务器上的字节数相匹配,我应该在DB中设置一个标志(告知下载成功并阻止他们再次下载文件/要求他们再次支付下载费用).如果下载不完整,他们应该能够再次下载文件而无需再次付款(因为不会设置标志).
有没有办法跟踪客户端成功下载的字节数?
另外,当我在WinXP机器中看到文件大小时,我看到两种尺寸(磁盘大小,大小).我应该考虑哪一个?它会因操作系统而异吗?
您可以轻松地测量在ASP.NET中传递给客户端的数据,假设您使用自己的IIS替换直接的IIS控制下载,这将是这样的:
while (context.Response.IsClientConnected) {
bytesRead = ReadFileChunkAsByteArrayWIthOffsetOrWhatever(buffer, offset);
context.Response.OutputStream.Write(buffer, 0, bytesRead);
context.Response.Flush();
offset += bytesRead;
if (bytesRead != bufferSize)
break;
}
Run Code Online (Sandbox Code Playgroud)
在ASP中使这100%可靠变得复杂,但是可以做到.您几乎必须考虑每个可能的故障点并做出相应的反应.
但问题仍然是 - 正如上面提到的那样 - 不可能知道客户端收到了数据.如果这笔交易涉及金钱,那么这可能会很快成为一个问题.
因此,最好的方法是使用自定义下载器客户端,例如亚马逊用于MP3文件购买的客户端.这样你就不会让你自己或你的客户受到像HTTP那样不可靠的移动货币化部分的变幻莫测.
您可以创建一个为该文件提供服务的 asp.net 处理程序(对于 asp.net mvc,您可以执行结果操作......这就是我正在使用的)。确保它支持可断点下载。
您可以从中跟踪所服务的字节。
诗。与让 IIS 提供服务相比,这会产生性能开销
更新1:我使用了与此http://dotnetslackers.com/articles/aspnet/Range-Specific-Requests-in-ASP-NET.aspx非常相似的东西......并且该文章对其中的内容有非常清晰的解释。您可能可以按原样使用该版本,请参阅该文章中的示例。