如何解決FtpWebRequest基礎(chǔ)連接已經(jīng)關(guān)閉?
方法:去掉FTP服務(wù)器中的中文歡迎詞或改成英文歡迎詞就不會(huì)發(fā)生錯(cuò)誤,這是微軟的一個(gè)BUG。
代碼:
public void Upload(string filename)
{
//IP
string FtpIP = System.Web.ConfiguratIOn.WebConfigurationManager.AppSettings["ftpIP"];
//用戶名
string FtpUserName = System.Web.Configuration.WebConfigurationManager.AppSettings["ftpUsrName"];
//用戶密碼
string FtpPassord = System.Web.Configuration.WebConfigurationManager.AppSettings["ftpUsrPsw"];
FileInfo fileInf = new FileInfo(filename);
string uri = "ftp://" + FtpIP + "/SYS/" + fileInf.Name;
FtpWebRequest reqFTP;
// 根據(jù)uri創(chuàng)建FtpWebRequest對(duì)象
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
// ftp用戶名和密碼
reqFTP.Credentials = new NetworkCredential(FtpUserName, FtpPassord);
// 默認(rèn)為true,連接不會(huì)被關(guān)閉
// 在一個(gè)命令之后被執(zhí)行
reqFTP.KeepAlive = false;
// 指定執(zhí)行什么命令
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
// 指定數(shù)據(jù)傳輸類型
reqFTP.UseBinary = true;
// 上傳文件時(shí)通知服務(wù)器文件的大小
reqFTP.ContentLength = fileInf.Length;
// 緩沖大小設(shè)置為2kb
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;
// 打開一個(gè)文件流 (System.IO.FileStream) 去讀上傳的文件
FileStream fs = fileInf.OpenRead();
try
{
// 把上傳的文件寫入流
//Stream strm = reqFTP.GetRequestStream();
Stream strm = reqFTP.GetRequestStream();
// 每次讀文件流的2kb
contentLen = fs.Read(buff, 0, buffLength);
// 流內(nèi)容沒有結(jié)束
while (contentLen != 0)
{
// 把內(nèi)容從file stream 寫入 upload stream
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
}
// 關(guān)閉兩個(gè)流
strm.Close();
fs.Close();
}
catch (Exception ex)
{
throw ex;
}
}