FTP 文件上传 忘记原文链接了,是国外的一个人写的。
上图,上代码!
上传方法:
/// <summary>
/// Method to upload the specified file to the specified FTP Server
/// </summary>
/// <param name="filename">file full name to be uploaded</param>
private void Upload(string filename)
{
FileInfo fileInf = new FileInfo(filename);
string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
FtpWebRequest reqFTP;
// Create FtpWebRequest object from the Uri provided
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name));
// Provide the WebPermission Credintials
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
// By default KeepAlive is true, where the control connection is not closed
// after a command is executed.
reqFTP.KeepAlive = false;
// Specify the command to be executed.
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
// Specify the data transfer type.
reqFTP.UseBinary = true;
// Notify the server about the size of the uploaded file
reqFTP.ContentLength = fileInf.Length;
// The buffer size is set to 2kb
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;
// Opens a file stream (System.IO.FileStream) to read the file to be uploaded
FileStream fs = fileInf.OpenRead();
try
{
// Stream to which the file to be upload is written
Stream strm = reqFTP.GetRequestStream();
// Read from the file stream 2kb at a time
contentLen = fs.Read(buff, 0, buffLength);
// Till Stream content ends
while (contentLen != 0)
{
// Write Content from the file stream to the FTP Upload Stream
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
}
// Close the file stream and the Request Stream
strm.Close();
fs.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Upload Error");
}
}
#region 判断文件夹是否存在
/// <summary>
/// 判断文件夹是否存在
/// </summary>
/// <param name="ftpFilePath"></param>
/// <returns></returns>
private bool CheckDireExist(string ftpParFilePath, string ftpSonFilePath)
{
FtpWebRequest ftpWebRequest = null; WebResponse webResponse = null;
StreamReader reader = null;
try
{
string uri = "ftp://" + ftpServerIP + "/" + ftpParFilePath;
ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
ftpWebRequest.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
ftpWebRequest.Method = WebRequestMethods.Ftp.ListDirectory;
ftpWebRequest.UsePassive = false; //选择主动还是被动模式 ,
ftpWebRequest.KeepAlive = false;
webResponse = ftpWebRequest.GetResponse();
reader = new StreamReader(webResponse.GetResponseStream(), Encoding.Default);
string line = reader.ReadLine();
while (line != null)
{
if (line.ToLower() == ftpSonFilePath.ToLower())
return true;
line = reader.ReadLine();
}
}
catch (Exception e)
{
throw e;
}
finally
{
if (reader != null) reader.Close();
if (webResponse != null) webResponse.Close();
} return false;
}
#endregion
#region 创建目录
/// <summary>
/// 文件路径如:/a/a.1/a.2, 如果a.1 a.2 不存在,也将创建
/// </summary>
/// <param name="strDirePath"></param>
public void MakeMultiFTPDire(string strDirePath)
{
if (string.IsNullOrEmpty(strDirePath)) return;
#region 修改目录字符串
//如果第一个字符不是斜杠,则添加斜杠
if (strDirePath.IndexOf('/') != 0)
{
strDirePath = "/" + strDirePath;
}
//去除最后一个斜杠
if (strDirePath.LastIndexOf('/') == strDirePath.Length - 1)
{
strDirePath = strDirePath.Substring(0, strDirePath.Length - 1);
}
#endregion
#region 创建目录
string[] strArray = strDirePath.Split('/');
string strParPath = ""; //父节点
string strSonPath = "/"; //子节点
for (int i = 0; i < strArray.Length - 1; i++)
{
strParPath += strArray[i] + "/";
strSonPath += strArray[i + 1] + "/";
if (!CheckDireExist(strParPath, strArray[i + 1])) MakeDir(strSonPath);
}
#endregion
}
/// <summary>
/// 在根目录创建目录,
/// </summary>
/// <param name="dirName"></param>
private void MakeDir(string dirName)
{
FtpWebRequest reqFTP;
try
{
// dirName = name of the directory to create.
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + dirName.TrimStart('/')));
reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
reqFTP.UseBinary = true;
reqFTP.UsePassive = false; //选择主动还是被动模式 ,
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
ftpStream.Close();
response.Close();
}
catch (Exception ex)
{
MessageBox.Show("创建目录" + dirName + "失败," + ex.Message);
}
}
#endregion