日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

winform下通过webclient使用非流方式上传(post)数据和文件

發布時間:2025/7/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 winform下通过webclient使用非流方式上传(post)数据和文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這兩天因為工作的需要,需要做一個winform上傳數據到服務器端的程序。當時第一個想法是通過webservice的方式來實現,后來覺得麻煩,想偷懶就沒有用這樣的方式,http的post方式變成了第一選擇。因為以前用的都是httpwebrequest之類的東西進行post提交,winform下面還真的是第一次,不過很快就在網上找到了webclient這個類,接下來開始實現功能,話說webclient用起來還真的很簡單,一個頭信息的聲明,然后是URL,最后是post的數據,就完事了。正在高興的時候發現了一個問題。之前post的全是字符串之類的信息,可是接下來要同時post數據和文件,這個該怎么辦呢,如何書寫post中的數據呢?google一下找到了類似這樣的帖http://www.iwms.net/n1765c12.aspx,這樣帖子很多,而且大多內容都完全一樣,互相轉來轉去的。但是大致中心思想就是讓我們用流拼接的方式進行post,可是說實話我看了半天沒有看懂。又懶得嘗試和模仿。難道就真的沒有像之前一樣采用a=XXX1&b=XXXX2這樣的形式進行文件和數據post的方法嗎?

OK,現在問題出來了,結論是肯定的,其實之所以不能像之前那樣post數據,主要的原因是無法把文件流和字符串進行拼接,那么只需要將文件流轉變為字符串就OK了。順著這個思路繼續的思考。

如果你做過Flash的開發那么現在馬上應該有相應的結論了,就是base64。碰巧我也是因為之前的一個Flash項目用到過Base64,所以很快的就想到了這個方法。微軟的c#給我們提供了一個非常好的方法Convert.ToBase64String,可以非常容易的將byte[]轉為string類型,既然有了這個方法,剩下的就是還是像以前一樣拼接提交的字符串就行了。

數據到了服務器端顯示request,之后用自帶的Convert.FromBase64String進行轉化成byte[]。

終于到了這里偷懶的同時post數據和文件到服務器上功能就實現了。

上代碼

?

讀取文件存為byte[]

FileStream?fs?=?new?FileStream("文件名",?FileMode.Open,?FileAccess.Read);
byte[]?byteFile?=?new?byte[fs.Length];
fs.Read(byteFile,?
0,?Convert.ToInt32(fs.Length));
fs.Close();

拼接提交的字符串

?

postData?=?"id=xxx&name=xxx&file="?+?HttpUtility.UrlEncode(Convert.ToBase64String(byteFile));

服務器端接收信息,并保存為文件

?

string?pic?=?Request["file"].ToString();
FileStream?fs?
=?new?FileStream("保存的文件完整路徑",?FileMode.Create,?FileAccess.Write);
fs.Write(Convert.FromBase64String(pic),?
0,?Convert.FromBase64String(pic).Length);
fs.Flush();
fs.Close();
?

?

現在想想可以省去那么多的代碼真的是一件很不錯的事情,向上面我們搜到的帖子內容說拜拜吧。

轉載于:https://www.cnblogs.com/duohahawuwu/archive/2011/05/04/2037039.html

總結

以上是生活随笔為你收集整理的winform下通过webclient使用非流方式上传(post)数据和文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。