winform下通過webclient使用非流方式上傳(post)資料和檔案

來源:互聯網
上載者:User

標籤:winform   c   class   code   tar   http   

這兩天因為工作的需要,需要做一個winform上傳資料到伺服器端的程式。當時第一個想法是通過webservice的方式來實現,後來覺得麻 煩,想偷懶就沒有用這樣的方式,http的post方式變成了第一選擇。因為以前用的都是httpwebrequest之類的東西進行post提 交,winform下面還真的是第一次,不過很快就在網上找到了webclient這個類,接下來開始實現功能,話說webclient用起來還真的很簡 單,一個頭資訊的聲明,然後是URL,最後是post的資料,就完事了。正在高興的時候發現了一個問題。之前post的全是字串之類的資訊,可是接下來 要同時post資料和檔案,這個該怎麼辦呢,如何書寫post中的資料呢?google一下找到了類似這樣的帖http://www.2cto.com/kf/201203/123217.html, 這樣文章很多,而且大多內容都完全一樣,互相轉來轉去的。但是大致中心思想就是讓我們用流拼接的方式進行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();

 

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.