asp.net 文件下載 - 跟踪下載大小
我正在嘗試使用 ASP.net/C# 為類似的東西設計一個系統。
使用者為下載一些內容(文件-mp3s/PDFs、doc 等)付費。我應該能夠跟踪使用者下載的字節數。如果下載的字節數與伺服器上的字節數匹配,我應該在 DB 中設置一個標誌(告訴下載成功並阻止他們再次下載文件/要求他們再次支付下載費用)。如果下載不完整,他們應該能夠再次下載文件而無需再次付費(因為不會設置標誌)。
有沒有辦法跟踪客戶端成功下載的字節數?
此外,當我在 WinXP 機器中看到文件大小時,我看到兩種大小(大小、磁碟大小)。我應該考慮哪一個?它會因一個作業系統而異嗎?
您可以創建一個為文件提供服務的 asp.net 處理程序(對於 asp.net mvc,您可以執行結果操作……這就是我正在使用的)。確保它支持可恢復下載。
從您可以跟踪提供的字節數。
附言。這會導致性能成本與讓 IIS 服務它
更新 1:我使用了與此http://dotnetslackers.com/articles/aspnet/Range-Specific-Requests-in-ASP-NET.aspx非常相似的東西……並且這篇文章對裡面的內容有一個非常清楚的解釋. 您可能可以按原樣使用它,請參閱該文章中的範例。
假設您將直接由 IIS 控制的下載替換為您自己的下載,您可以輕鬆地測量在 ASP.NET 中傳遞給客戶端的數據,如下所示:
while (context.Response.IsClientConnected) { bytesRead = ReadFileChunkAsByteArrayWIthOffsetOrWhatever(buffer, offset); context.Response.OutputStream.Write(buffer, 0, bytesRead); context.Response.Flush(); offset += bytesRead; if (bytesRead != bufferSize) break; }在 ASP 中使這個 100% 可靠是很複雜的,但它可以做到。您幾乎必須考慮每一個可能的故障點並做出相應的反應。
但問題仍然是 - 正如上面提到的那樣 - 不可能知道客戶端收到了數據。如果這筆交易涉及金錢,那很快就會成為一個問題。
出於這個原因,最好的方法是使用自定義下載器客戶端,例如亞馬遜用於購買 MP3 文件的客戶端。這樣,您就不會讓您自己或您的客戶受制於將貨幣化比特轉移到像 HTTP 這樣不可靠的東西上。