Silverlight技術研討:WebClient, 檔案下載利器
對於小型的Silverlight應用程式,可以把所有內容,包括資源,都包含在一個Xap包中釋出。對於開發者來說,是個很便利的選擇,可以把更多的精力和時間用到程式的功能方面,提高開發效率。但是對於使用者來說,如果xap檔案過大,需要下載幾分鐘或者更長時間才能看到實際效果,可能是一個很糟糕的使用者體驗,一定需要很大的勇氣和決心才會再次訪問。為了解決初始下載主包時間太長的問題,開發者一般會把比較大的音訊,視訊和圖片等資源從主包中剝離出來,使用動態下載方式。而無論是那種動態下載技術,WebClient類都扮演著十分重要的角色。我們需要深刻的認識和理解WebClient,才能更好的決定動態下載技術和策略。這一節作者首先介紹和剖析WebClient類。
首先看看官方的線上幫助,是最權威的解釋。用於上傳伺服器檔案的方法就不提了,這裡只關心用於下載的兩個方法:DownloadStringAsync和OpenReadAsync,一個用於下載字串,另一個下載檔案流。使用方法很相像,以OpenReadAsync為例,值得注意的有這麼幾點:
1. 此方法使用 GET 方法檢索指定的資源。資源是非同步下載的。
2. 在完成第一個下載操作前,不能對同一 WebClient 物件再次呼叫 OpenReadAsync 方法。執行此操作會導致異常。
3. 如果 BaseAddress 屬性不是空字串,且地址不包含絕對 URI,則該地址必須是相對 URI,此 URI 與 BaseAddress 組合在一起構成所請求資料的絕對 URI。
第一點非同步下載沒什麼好說的了,這對於好的使用者體驗是必須的,否則在下載過程中使用者只能絕望的等待,不能看到一點進一步的資訊,使用者是會瘋掉的。
第二點有點意思,是說一個WebClient 物件不可以同時進行兩個下載,否則會導致異常。不過言外之意是,如果想要同時下載另外一個檔案,可以建立一個新的WebClient 物件。作者未曾驗證過,希望沒有誤解權威的意思。
第三點很重要,WebClient需要一個絕對地址來進行下載。你可以直接提供一個絕對地址,沒問題。如果你打算用相對地址,則必須保證BaseAddress 與這個相對地址可以組合成正確的絕對地址。預設時BaseAddress 為主xap包的地址,例如http://localhost/ClientBin/MyApp.xap。那麼你一定要保證相對地址是相對於http://localhost/ClientBin/的。
注意對於DownloadStringAsync和OpenReadAsync 方法,還可以傳遞一個使用者自定義的引數,userToken。“將 userToken 作為傳遞到在完成非同步操作時呼叫的方法的 AsyncCompletedEventArgs 的 UserState 屬性接收。”
舉個例子來說,當呼叫OpenReadAsync 時,可以把檔名當作第二個引數。在註冊的下載完成的方法裡,e.UserState包含了該檔名,於是你就知道下載的是哪個檔案了。
WebClient還有一個十分酷的特性,可惜官方幫助沒有提及。WebClient可以與瀏覽器共享快取檔案!具體說來,如果你通過網頁瀏覽已經快取了某個檔案,當你用WebClient下載這個檔案時,WebClient會直接從快取檔案中直接讀取,不再重新下載。反之亦然,WebClient下載的檔案會儲存在瀏覽器快取目錄中,供瀏覽器和WebClient下次使用。這可是實現silverlight動態下載並快取的理論基礎,十分重要!!
當然有些時候開發者並不想使用快取檔案。例如伺服器檔案更新了,希望下載最新的檔案而不是快取的檔案。這種情況怎麼處理呢?有人提出了一個解決辦法:因為檔案快取是基於url的,如果在url後面加上一些隨機的無意義的字元,例如?o=123,則可繞過快取。缺點是每次下載都會增加新的快取檔案,浪費空間啊。
理論準備暫時就這麼多了,後面文章將詳細講述WebClient在動態下載中的具體應用。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-630140/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Winform檔案下載之WebClientORMWebclient
- 開發培訓及技術研討會PPT下載連結
- Autodesk 最新開發技術研討會-北京-上海-武漢-成都-西安-PPT下載
- Silverlight微軟研討會範例微軟
- 精講響應式WebClient第4篇-檔案上傳與下載Webclient
- 技術討論 | 如何利用Microsoft Edge漏洞獲取本地檔案?ROS
- 檔案下載
- 任意檔案下載漏洞的介面URL構造分析與討論
- 00、下載檔案
- Ajax 下載檔案
- FastApi下載檔案ASTAPI
- MVC 下載檔案MVC
- js 檔案下載JS
- Servlet下載檔案Servlet
- httpWebRequest 檔案下載HTTPWeb
- php檔案下載PHP
- .net 檔案下載
- php 檔案下載PHP
- HttpClient 下載檔案HTTPclient
- Response下載檔案
- 檔案程式設計、檔案下載程式設計
- 技術預研
- iOS開發網路篇之檔案下載、大檔案下載、斷點下載iOS斷點
- Flutter 下載檔案操作Flutter
- SpringMVC檔案下載SpringMVC
- 【springmvc】下載檔案SpringMVC
- 使用PHP下載檔案PHP
- 檔案下載相關
- ftp下載指定檔案FTP
- C#檔案下載C#
- PHP檔案下載原理PHP
- 檔案上傳下載
- 純前端表格技術應用研討會——華為供應鏈專場前端
- 華為天安雲谷基地專場 — 純前端表格技術應用研討會前端
- Autodesk 最新開發技術研討會 -8月22日-Autodesk北京辦公室
- Oracle 技術探討3Oracle
- Oracle 技術探討2Oracle
- Oracle 技術探討1Oracle