上传书籍进度信息到服务器...,使用HttpWebRequest实现大文件上传资料.pdf
Twilight Software Development Studio ? 2011
使用HttpWebRequest 實現(xiàn)大文件上傳
Author:xuzhihong
Create Date:2011-06-03
Descriptions: WinForm 程序使用HttpWebRequest 實現(xiàn)大文件上傳
Url: /blog/static/2673158720115991432899/
概述:
通常在WinForm 程序中都是采用WebClient 方式實現(xiàn)文件上傳功能,本身這
個方式?jīng)]有問題,但是當(dāng)需要上傳大文件比如說(300+M)的時候,那么WebClient
將會報內(nèi)存不足異常(Out of Memory Exceptions ),究其原因是因為WebClient
方式是一次性將整個文件全部讀取到本地內(nèi)存中,然后再以數(shù)據(jù)流形式發(fā)送至服
務(wù)器。本文將講述如何采用HttpWebRequest 方式每次讀取固定大小數(shù)據(jù)片段(如
4KB )發(fā)送至服務(wù)器,為大文件上傳提供解決方案,本文還將詳細(xì)講述將如何將
“文件上傳”功能做為用戶自定義控件,實現(xiàn)模塊重用。
關(guān)鍵詞:HttpWebRequest、WebClient 、OutOfMemoryExceptions
解決方案:
開始我在 WinForm 項目中實現(xiàn)文件上傳功能的時候,是采用 WebClient
(WebClient myWebClient = new WebClient ();)方式,這大部分情況都是正確
的,但有時候會出現(xiàn)內(nèi)存不足的異常 (Out of Memory Exceptions ),經(jīng)常測試,
發(fā)現(xiàn)是由于上傳大文件的時候才導(dǎo)致這問題。在網(wǎng)上查閱了一下其他網(wǎng)友的解決
方案,最后找的發(fā)生異常的原因:“WebClient 方式是一次性將整個文件全部讀取
到本地內(nèi)存中,然后再以數(shù)據(jù)流形式發(fā)送至服務(wù)器”,詳細(xì)請參考:
1
使用HttpWebRequest 實現(xiàn)大文件上傳
Twilight Software Development Studio ? 2011
/b/johan/archive/2006/11/15/are-you-getting-outofmemorye
xceptions-when-uploading-large-files.aspx 。按照這個解釋,那么大文件上傳出現(xiàn)
內(nèi)存不足的異常也就不足為奇了。下面我將講述如何一步步使用HttpWebRequest
方式來實現(xiàn)文件分塊上傳數(shù)據(jù)流至服務(wù)器。
按照慣例還是先預(yù)覽一下文件上傳最后的效果吧,如下圖所示:
界面分為兩部分,上面是文件基本信息,下面是文件上傳自定義控件,我這里實
現(xiàn)的是一個案件上傳多個監(jiān)控視頻功能。以下是詳細(xì)步驟:
第一步:創(chuàng)建用戶自定義控件BigFileUpload.xaml
文件上傳是一個非常常用的功能,為了所寫的程序能非常方便地多次重復(fù)使
用,我決定將其處理為一個用戶自定義控件(UserControl )。
我們先在項目中創(chuàng)建一個FileUpload 文件夾,在其目錄下新建一個WPF 自定
義控件文件命名為BigFileUpload.xaml,這樣就表示文件上傳是一個獨立的小模塊
使用。之所以用WPF 自定義控件是因為WPF 頁面效果好看點,而且我想以后可
能大部分C/S 程序都會漸漸的由WinForm 轉(zhuǎn)向WPF 吧,當(dāng)然創(chuàng)建Window Forms
用戶控件也是沒有問題的。然后我們需要做一個下圖效果的頁面布局:
2
使用HttpWebRequest 實現(xiàn)大文件上傳
Twilight Software Development Studio ? 2011
前臺設(shè)計代碼如下:
xmlns="/winfx/2006/x
總結(jié)
以上是生活随笔為你收集整理的上传书籍进度信息到服务器...,使用HttpWebRequest实现大文件上传资料.pdf的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一公里是多远 一公里的解释
- 下一篇: Path环境变量的理解以及设置MinGW