C#語言的文件下載示例

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Collections;

using System.Net;

using System.IO;

namespace www.xinduofen.com

{

///

/// C#與http服務(wù)器端進(jìn)行對接的工具類

///

classwww.xinduofen.cn

{

///

/// 用于緩存服務(wù)器端傳輸?shù)娇蛻舳说腟ESSIONID或者JSESSIONID

///

private Cookie sessionidCookie = null;

///

/// 從HttpWebServer端獲取文件(使用的是"post"方式)

///

/// 請求網(wǎng)址

/// 請求參數(shù)集合,無需參數(shù)時(shí)傳入null值

/// 請求cookie集合神汹,無需cookie時(shí)傳入null值

/// 下載文件將要保存的位置(包括"文件名"."擴(kuò)展名")

/// 返回true代表成功濒持,false代表失敗

public Boolean getFileFromHttpWebServer(String url, Hashtable data, CookieCollection cookies,String fileSaveAddress)

{

Boolean result = false;

if (string.IsNullOrEmpty(url) || string.IsNullOrEmpty(fileSaveAddress))

{

return false;//傳入?yún)?shù)異常

}

byte[] data_stream = null;//將要向服務(wù)器傳輸?shù)臄?shù)據(jù)流內(nèi)容

if (data != null && data.Count > 0)

{

string transportData = "";//將要向服務(wù)器傳輸?shù)淖址畠?nèi)容

foreach (DictionaryEntry de in data)

{

transportData = transportData + de.Key.ToString() + "=" + de.Value.ToString() + "&";//解調(diào)出鍵值對數(shù)據(jù)

}

transportData = transportData.TrimEnd('&');//去除字符串尾部的 &

if (!string.IsNullOrEmpty(transportData))

{

data_stream = Encoding.UTF8.GetBytes(transportData);//將上傳字符串?dāng)?shù)據(jù)打包成數(shù)據(jù)流

}

}

try

{

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);

//請求方式

req.Method = "POST";

//聲明客戶端接收任意類型的文件流

req.Accept = "application/octet-stream";

//以鍵值對形式向服務(wù)器傳遞參數(shù)

req.ContentType = "application/x-www-form-urlencoded";

//設(shè)置cookie盒子(客戶端請求的cookie和服務(wù)器端返回的cookie就放在此盒子中)

CookieContainer cookieContainer = new CookieContainer();

if (sessionidCookie != null && !string.IsNullOrEmpty(sessionidCookie.Domain))

{

cookieContainer.Add(sessionidCookie);

}

if (cookies != null)

{

cookieContainer.Add(cookies);//添加調(diào)用者傳入的cookie集合

}

req.CookieContainer = cookieContainer;

if (data_stream != null && data_stream.Length > 0)

{

//請求數(shù)據(jù)流的長度

req.ContentLength = data_stream.Length;

using (Stream requestStream = req.GetRequestStream())

{

//寫入請求實(shí)體流

requestStream.Write(data_stream, 0, data_stream.Length);

}

}

//接收返回值

using (HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse()) {

if (myResponse.Cookies["SESSIONID"] != null)

{

sessionidCookie = myResponse.Cookies["SESSIONID"];

}

else

{

if (myResponse.Cookies["JSESSIONID"] != null)

{

sessionidCookie = myResponse.Cookies["JSESSIONID"];

}

}

////下面為服務(wù)器端返回的下載文件名,留下作為參考用的

//if (myResponse.StatusCode == HttpStatusCode.OK)

//{

// ? ?byte[] str = Encoding.GetEncoding("ISO-8859-1").GetBytes(myResponse.GetResponseHeader("Content-Disposition"));

// ? ?string disposition = Encoding.UTF8.GetString(str);

// ? ?Console.WriteLine("disposition:" + disposition);

//}

//流對象使用完后自動(dòng)關(guān)閉

using (Stream stream = myResponse.GetResponseStream())

{

//文件流北发,流信息讀到文件流中吐咳,讀完關(guān)閉

using (FileStream fs = File.Create(fileSaveAddress))

{

//建立字節(jié)組练湿,并設(shè)置它的大小是多少字節(jié)

byte[] bytes = new byte[10240];

int n = -1;

while ((n = stream.Read(bytes, 0, bytes.Length)) > 0)

{

fs.Write(bytes, 0, n); //將指定字節(jié)的流信息寫入文件流中

}

}

}

}

result = true;//下載成功

}

catch (Exception)

{

Console.WriteLine("請查看傳入?yún)?shù)是否正確或者服務(wù)器是否關(guān)閉");

}

return result;

}

///

/// 獲得參數(shù)data的消息數(shù)據(jù)流虽风,以"\r\n"結(jié)尾

///

/// 請求參數(shù)集合许溅,無需參數(shù)時(shí)傳入null值

/// 消息分隔符

/// 返回參數(shù)data的數(shù)據(jù)流温鸽,返回為空代表獲得失敗

private byte[] getParameterBytes(Hashtable data, String boundary)

{

byte[] parameterBytes = null;

//如果有請求參數(shù)

if (data != null && data.Count > 0)

{

string parameterStr = "";

foreach (DictionaryEntry de in data)

{

parameterStr += "--" + boundary;

parameterStr += "\r\n" + "Content-Disposition: form-data;name=\"" + de.Key.ToString() + "\"";

parameterStr += "\r\n" + "Content-Type: text/plain; charset=UTF-8";

parameterStr += "\r\n\r\n" + de.Value.ToString();

parameterStr += "\r\n";

}

if (!string.IsNullOrEmpty(parameterStr))

{

parameterBytes = Encoding.UTF8.GetBytes(parameterStr);//將上傳字符串?dāng)?shù)據(jù)打包成數(shù)據(jù)流

}

}

return parameterBytes;

}

///

/// 獲得上傳文件的消息頭部分字符流保屯,以"\r\n\r\n"結(jié)尾

///

/// 上傳文件《控件名,上傳文件的保存位置(包括"文件名"."擴(kuò)展名")》

/// 消息分隔符

/// 返回上傳文件的消息頭部分字符流手负,返回會(huì)為null代表獲得失敗

private byte[] getUploadFileDeclareBytes(DictionaryEntry de, String boundary)

{

byte[] uploadFileDeclareBytes = null;

//上傳文件的消息頭描述部分

string uploadFileDeclareStr = "";

uploadFileDeclareStr += "--" + boundary;

uploadFileDeclareStr += "\r\n" + "Content-Disposition: form-data;name=\"" + de.Key.ToString() + "\"; filename=\"" + de.Value.ToString() + "\"";

uploadFileDeclareStr += "\r\n" + "Content-Type: application/octet-stream";

uploadFileDeclareStr += "\r\n\r\n";

if (!string.IsNullOrEmpty(uploadFileDeclareStr))

{

uploadFileDeclareBytes = Encoding.UTF8.GetBytes(uploadFileDeclareStr);//將上傳字符串?dāng)?shù)據(jù)打包成數(shù)據(jù)流

}

return uploadFileDeclareBytes;

}

}

}

內(nèi)容所有權(quán)屬于越康體育(專業(yè)從事體質(zhì)測試儀學(xué)生體質(zhì)測試儀)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姑尺,一起剝皮案震驚了整個(gè)濱河市竟终,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌切蟋,老刑警劉巖统捶,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異柄粹,居然都是意外死亡喘鸟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門驻右,熙熙樓的掌柜王于貴愁眉苦臉地迎上來什黑,“玉大人,你說我怎么就攤上這事堪夭°蛋眩” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵茵瘾,是天一觀的道長礼华。 經(jīng)常有香客問我,道長拗秘,這世上最難降的妖魔是什么圣絮? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮雕旨,結(jié)果婚禮上扮匠,老公的妹妹穿的比我還像新娘。我一直安慰自己凡涩,他們只是感情好棒搜,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著活箕,像睡著了一般力麸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上育韩,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天克蚂,我揣著相機(jī)與錄音,去河邊找鬼筋讨。 笑死埃叭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的悉罕。 我是一名探鬼主播赤屋,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼立镶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了类早?” 一聲冷哼從身側(cè)響起媚媒,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎莺奔,沒想到半個(gè)月后欣范,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡令哟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了妨蛹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屏富。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蛙卤,靈堂內(nèi)的尸體忽然破棺而出狠半,到底是詐尸還是另有隱情,我是刑警寧澤颤难,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布神年,位于F島的核電站,受9級特大地震影響行嗤,放射性物質(zhì)發(fā)生泄漏已日。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一栅屏、第九天 我趴在偏房一處隱蔽的房頂上張望飘千。 院中可真熱鬧,春花似錦栈雳、人聲如沸护奈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽霉旗。三九已至,卻和暖如春蛀骇,著一層夾襖步出監(jiān)牢的瞬間厌秒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工松靡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留简僧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓雕欺,卻偏偏與公主長得像岛马,于是被迫代替她去往敵國和親棉姐。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理啦逆,服務(wù)發(fā)現(xiàn)伞矩,斷路器,智...
    卡卡羅2017閱讀 134,704評論 18 139
  • 內(nèi)容很好夏志,可以直接使用乃坤,內(nèi)容所有權(quán)屬于:htpp://www.xinduofen.com/ using Syste...
    tjxy9rjxl3QP閱讀 562評論 0 0
  • using System; using System.Collections.Generic; using Sys...
    tjxy9rjxl3QP閱讀 4,374評論 0 0
  • 在微信上發(fā)3個(gè)紅包,4個(gè)朋友搶沟蔑,沒搶到的人喝雪碧湿诊,每個(gè)人都帶著三個(gè)月的肚子在操場上散步。我忘記了發(fā)生什么說要哭給他...
    胡biubiu閱讀 408評論 3 1
  • “嚴(yán)小姐吧瘦材?我厅须,我是,我是鄭毅食棕。我想……” “嘟嘟嘟……”對方還沒等鄭毅說完就掛了電話朗和。 為什么非要給人家打這個(gè)電...
    樵砥閱讀 186評論 0 1