我使用WebClient的對象下載(從服務器到客戶端)的文件獲取文件大小:在Silverlight 4
WebClient wc = new WebClient();
wc.OpenReadCompleted += Load_TransferCompleted;
wc.OpenReadAsync(uriAddress, Filename);
我想之前知道文件大小開始下載操作。有沒有辦法在SL4中做到這一點?
感謝您的幫助。
吉拉德。
我使用WebClient的對象下載(從服務器到客戶端)的文件獲取文件大小:在Silverlight 4
WebClient wc = new WebClient();
wc.OpenReadCompleted += Load_TransferCompleted;
wc.OpenReadAsync(uriAddress, Filename);
我想之前知道文件大小開始下載操作。有沒有辦法在SL4中做到這一點?
感謝您的幫助。
吉拉德。
下面是一些空氣代碼你一起玩(我還沒有測試它自己)
WebRequest req = WebRequestCreator.ClientHttp.Create(yourUri);
req.Method = "HEAD";
req.BeginGetResponse(ar =>
{
WebResponse resp = req.EndGetResponse(ar);
int length = resp.ContentLength;
// Do stuff with length
}, null);
通過使用ClientHttp
堆棧可以使用「HEAD」請求將返回同一組頭作爲「GET」而不是實際的實體。
雖然至少有一點需要注意,但是請求中不會發送uri的現有cookie。如果響應對Cookie很敏感(例如因爲它需要會話ID),那麼事情會變得更加複雜。
此代碼在\t處引發安全性錯誤\t \t \t WebResponse resp = req.EndGetResponse(ar); 。有小費嗎? – 2014-01-06 05:03:17
我認爲使這成爲可能的唯一方法是發佈大小。它可以被編碼,但也可以通過網絡服務獲得。
我很害怕這個,Webservice不是一個選項,手動添加文件大小作爲參數在項目中是相當麻煩的。 – Gilad 2011-05-11 11:21:10
從某種角度來看,服務器端的東西不是(很容易)可用於客戶端是件好事。您可以將大小添加到Silverlight應用程序所在的頁面嗎?它甚至可能是一個隱藏的輸入。在Silverlight中,您可以使用HTML橋接來獲取隱藏輸入並讀取值。這是一個可怕的黑客,但可以完成。 – 2011-05-11 11:27:04
我已經將大小添加到HTML頁面。這樣做的問題是每次更改文件時都必須手動更新大小。我正在考慮一個更輕鬆的解決方案。 – Gilad 2011-05-11 16:11:02
如果我們知道您爲什麼想在下載前知道尺寸,這可能會有幫助嗎? – AnthonyWJones 2011-05-11 12:05:07
我有多個文件(可以說10),一個接一個地下載。我想顯示一個進度條並估計完整(對於所有文件)下載操作持續時間。這些文件的大小不一樣。 – Gilad 2011-05-11 15:22:38
文件大小有多大?爲什麼不顯示迄今爲止下載的文件數量? – AnthonyWJones 2011-05-12 12:25:37