2013-03-04 91 views
1

我正在嘗試跟蹤文件下載次數以及下載次數。由於無法從File SaveAs對話框中獲取任何單擊事件,因此我想知道處理程序是否可以真正知道下載是否被取消或用戶選擇下載它?HTTPHandler跟蹤下載可以取消嗎?

此鏈接ASP.NET file download - detect if user cancelled download?建議有另一個確認對話框來完成工作,但我認爲這可能不是一種用戶友好的方法。

我不排除錯誤點擊下載按鈕的可能性,所以我只想知道是否真的有辦法知道何時增加下載的時間。

更新:

我現在有這個代碼後,做了一些閱讀。

int maxCount = (int)Math.Ceiling((file.Length - startBytes + 0.0)/1024); 

    int i; 
    for (i = 0; i < maxCount && context.Response.IsClientConnected; i++) 
    { 
     context.Response.BinaryWrite(_BinaryReader.ReadBytes(1024)); 
     context.Response.Flush(); 
    } 

    if (i < maxCount) 
    { } 
    else 
    { 
     //Update Increment 
    } 

我仍然試圖通知取消事件,以便我不會更新增量如果用戶沒有真正下載它。但我注意到,儘管按下取消,增量仍在更新中。涉及此下載的文件很小,大約100kb或更多。

在我看來,for循環已經完成,在Response.IsClientConnected變成false之前。我可以改變什麼來完成這項工作?任何指針將非常感激。

回答

2

發送整個回覆後檢查屬性IsClientConnected。如果客戶端取消或斷開連接,它會告訴你。

最重要的是您在響應流上調用End之前檢查此屬性,否則連接仍會關閉。

所以基本上可以歸結爲:

  • 要發送的數據
  • 驗證客戶端仍連接
  • 關閉連接

可選方案,您可能要檢查這個值即使在定期向客戶提供數據時也是如此。

有關詳細信息,請參見MSDN

+0

對不起,我對處理程序不太熟悉。所以我應該把這個,'if(context.Response.IsClientConnected == true)',在這之後,'context.Response.End();'? – Zenvo 2013-03-04 07:08:53

+0

不,在調用'End'之前(否則無論如何都會關閉連接)。基本上,您需要在發送所有數據之後,但在關閉連接之前完成此操作。 – 2013-03-04 08:02:39

+0

嘿,我已經更新了我的問題,你可以看看嗎?我很確定我放置了「IsClientConnected」有什麼問題。 – Zenvo 2013-03-05 02:48:47