用WebClient.UploadData方法上載文件數據的方法
2024-07-09 22:47:04
供稿:網友
假如某網站有個表單,例如(url: http://localhost/login.aspx):
帳號
密碼
我們需要在程序中提交數據到這個表單,對于這種表單,我們可以使用 WebClient.UploadData 方法來實現,將所要上傳的數據拼成字符即可,程序很簡單:
string uriString = "http://localhost/login.aspx";
// 創建一個新的 WebClient 實例.
WebClient myWebClient = new WebClient();
string postData = "Username=admin&Password=admin";
// 注意這種拼字符串的ContentType
myWebClient.Headers.Add("Content-Type","application/x-www-form-urlencoded");
// 轉化成二進制數組
byte[] byteArray = Encoding.ASCII.GetBytes(postData);
// 上傳數據,并獲取返回的二進制數據.
byte[] responseArray = myWebClient.UploadData(uriString,"POST",byteArray);
對于文件上傳類的表單,例如(url: http://localhost/uploadFile.aspx):
文件
對于這種表單,我們可以使用
String uriString = "http://localhost/uploadFile.aspx";
// 創建一個新的 WebClient 實例.
WebClient myWebClient = new WebClient();
string fileName = @"C:upload.txt";
// 直接上傳,并獲取返回的二進制數據.
byte[] responseArray = myWebClient.UploadFile(uriString,"POST",fileName);
還有一種表單,不僅有文字,還有文件,例如(url: http://localhost/uploadData.aspx):
文件名
文件
對于這種表單,似乎前面的兩種方法都不能適用,對于第一種方法,不能直接拼字符串,對于第二種,我們只能傳文件,重新回到第一個方法,注意參數:
public byte[] UploadData(
string address,
string method,
byte[] data
);
在第一個例子中,是通過拼字符串來得到byte[] data參數值的,對于這種表單顯然不行,反過來想想,對于uploadData.aspx這樣的程序來說,直接通過網頁提交數據,后臺所獲取到的流是什么樣的呢?(在我以前的一篇blog中,曾分析過這個問題:asp無組件上傳進度條解決方案),最終的數據如下:
-----------------------------7d429871607fe
Content-Disposition: form-data; name="file1"; filename="G:homepage.txt"
Content-Type: text/plain
寶玉:http://www.webuc.net
-----------------------------7d429871607fe
Content-Disposition: form-data; name="filename"
default filename
-----------------------------7d429871607fe--