2009年1月11日 星期日

利用Silverlight實現網頁檔案上傳進度

  技術的變化總是讓人目不暇給,有時候回頭想也挺令人感慨。

  我記得我一年多前,為了透過AJAX技術實現檔案上傳的進度機制,老實說吃了不少苦頭,當Silverlight 1.0出現的時候, 我針對這個功能也嘗試做了一個範例,但是礙於JavaScript在用戶端龐雜的程式碼,因此這個範例始終沒有跟大家見面(所以在Sivlerlight 1.0的書籍中當然您也沒有看到),時至2009年,最近終於有了一點時間,花了一兩天做了一個Silverlight 2.0的檔案上傳類別, 透過 Silverlight 2.0實作這個功能確實是比起用AJAX輕鬆了不少,例如透過Silverlight 2.0的功能我可以輕鬆的調用Web Service, 我可以相當容易的針對用戶端的檔案作存取, 不需要礙於Browser對於用戶端檔案沒有權限而費盡心思的處理安全性議題,檔案的上傳過程中難免也會有timeout或是其他的Exception, 透過Sivlerlight 2.0撰寫的用戶端程式碼, 要處理這些Exception容易很多, 也因此, 在Silverlight 2.0推出之時(嚴格說起來是1.1那時候), 我就在想, 或許對於大多數的ASP.NET開發人員來說, 檔案上傳進度才是我要透過Silverlight迫切實現的一些關鍵技術, 其他諸如很炫的UI? 2D或是3D動畫效果, 很抱歉, 老實說其實我對這些沒多大興趣...這些屬於加分用的功能, 可以讓我的產品賣相好一點, 但不太可能憑這些功能幹掉對手, 且這部分交給Designer來完成就好...(請原諒我的開發人員本位主義和要不得的程序員心態...^_^)

  so, 或許你有興趣試試看底下這個prototype, 我會在快要寫完的Silverlight 2.0-3.0書籍中介紹(如果時間來的及, 或許我會先在下一期的RunPC介紹相關的程式碼開發方式), 另外由於Hosting的限制, 請不要上傳超過1.5M大小的檔案, 不然很容易把我用很便宜的價格租來的Web Server拖垮, 傳一兩個檔案玩玩就好, 這不是完整版, 所以也可能有一些bugs, 如果有任何問題, 請讓我知道。另外, 請不要上傳有任何安全性疑慮或爭議的檔案, 我無法保證你上傳上來的檔案的安全, 請留意。

[Upload File Progress with Silverlight 2.0]
補充說明一下,建議您上傳.gif, .jpg, .png圖檔或.rar壓縮檔,否則有一些檔案就算你上傳成功,由於Hosting的關係,你可能也會下載失敗...檔案無法驗證上傳結果...

10 則留言:

劉仲濱(Bing.) 提到...

測試了一下 ;-)

k` 提到...

董老师...
我装Silverlight装了好多天了,,,

我买了您的Silverlight权威讲座..是一点零的,

我装了2005 有了 VS2005SP1
sdk, ajax1.0 Framework3.5

运行的时候老是出现Get Microsoft Silverlight ..

愁死我了,请老师帮我分析下~

我学完这本书我再买老师2.0的书~

David 提到...

k` ,

請留意你的WebForm中的HTML Code, 特別是Object段落, 由於目前已經2.0的runtime, 所以你必須調整html code, 或是升級你在webform中使用的Silverlight control到new version.

Brian Chang-Chien 提到...

董老師你好
可否請教一下
你這個範例
當你完成上傳時,右邊會顯示上傳的檔名
而且還有link可以下載
請問一下這是怎麼作到的
可以給個範例嗎

David 提到...

這部份只是將上傳的檔案放在特定目錄下,再將hyperlink指過去而已,完整的範例會在筆者年後出版的Silverlight專書中收錄~

k` 提到...

老师您出Silverlight2.0的书吧~~~?
我的基础不是太好,1.0的现在行不通。就是不知道怎么把从Expression Blend 2的东西搞到VS2008上,和1.0不一样。您出书吧,我一定捧场~~~

David 提到...

沒問題,Silverlight 2.0的書預計將會在年後出版, 請再稍等一下吧...^_^

k` 提到...

啧,能看到老师的留言我真是激动。
老师新年好,然后,
希望老师的Silverlight 2.0 教程里面有一些比较酷炫的动画效果,关键是能否镶嵌入html或aspx等页面里使用 比如说,能读取后数据的多种变换出现广告新闻的那种 1 2 3 图片窗体,和 载入动画的进度动画表现 还有Silverlight 2.0制作可以更换多种皮肤的栏目可自定义拖拽WEB页面, 这些是比较实用的不借助FLASH 来表现 技术,
个人也想做个比较酷炫的动画控制的网站,比如说载入页面时出现一段动画,然后停在主页动画里面根据按钮打开新的页面或是在本页面开始另一段动画。之类的,这就是我对Silverlight 2.0的梦想!!
用FLASH我现在能做出来,不过不会联接数据库~ 所以我寄希望于Silverlight 2.0!!

老师我现在用的是VS2008简体中文版,现在出的工具支持简体中文了。安装上是简单点。

我跟定董老师您了!希望您出书后在中国大陆淘宝网上卖书给俺一亲笔签名!俺崇拜你!happy 牛 Year !! 祝您身体健康,事业蒸蒸日上!心想事成 ! 成事如意 ! 我们爱您!!

k 提到...

突然想起还有SilverLight的全景场景的制作 和控制!。。。俺的想法很多。。。谢谢!

k` 提到...

经过一晚上思索突然想起来,Silverlight如何制作动态的金子塔结构动画。比如说,最上面是我,下面两条线连着我两个儿子,下面两四条线连着我儿子的四个儿子,之类的通过数据库读出关系数据,并且生成动画,鼠标中键滚动可以放大缩小,点击单个头象会有详细内容出现。。。

还有三D表现的导入,比如说一个地图,上面的地区业务量的柱状表现。。。以颜色区分业务热区。。。


谢谢老师!!