asp.net文件下载 - 跟踪下载的大小

ram*_*ram 8 asp.net http file httphandler httpmodule

我试图用ASP.net/C#设计一个这样的系统.

用户付费下载一些内容(文件 - mp3/PDF,doc等).我应该能够跟踪用户下载的字节数.如果下载的字节数与服务器上的字节数相匹配,我应该在DB中设置一个标志(告知下载成功并阻止他们再次下载文件/要求他们再次支付下载费用).如果下载不完整,他们应该能够再次下载文件而无需再次付款(因为不会设置标志).

有没有办法跟踪客户端成功下载的字节数?

另外,当我在WinXP机器中看到文件大小时,我看到两种尺寸(磁盘大小,大小).我应该考虑哪一个?它会因操作系统而异吗?

kpr*_*bst 7

您可以轻松地测量在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那样不可靠的移动货币化部分的变幻莫测.


egl*_*ius 1

您可以创建一个为该文件提供服务的 asp.net 处理程序(对于 asp.net mvc,您可以执行结果操作......这就是我正在使用的)。确保它支持可断点下载。

您可以从中跟踪所服务的字节。

诗。与让 IIS 提供服务相比,这会产生性能开销

更新1:我使用了与此http://dotnetslackers.com/articles/aspnet/Range-Specific-Requests-in-ASP-NET.aspx非常相似的东西......并且该文章对其中的内容有非常清晰的解释。您可能可以按原样使用该版本,请参阅该文章中的示例。