public class FTP
{
static FtpWebRequest reqFTP;
static WebResponse response;
static StreamReader ftpStream;
static Stream strm;
static FileStream fs;
//const string temp = "temp";
static string filenametemp = "";
static string ftpServerIP = ConfigurationManager.AppSettings["ftpIP"];
static string ftpUserID = ConfigurationManager.AppSettings["ftpUid"];
static string ftpPassword = ConfigurationManager.AppSettings["ftpPwd"];
/// <summary>
/// 上传
/// </summary>
/// <param name="path">绝对路径</param>
/// <param name="filename">经销商文件夹名称</param>
/// <returns></returns>
public static bool Upload(string path,string filename)
{
bool bol = false;
string ftppath= @"ftp://" + ftpServerIP;
//fileRename(ftppath, "Test1", temp);
if (CheckFTPFile(filename, ftppath))
{
if (StatusUpLoad("", filename, path, ftppath))
{
bol = true;
}
}
else
{
if (CreateFile(ftppath + "/" + filename))
{
if (!CheckFTPFile("Advert", ftppath + "/" + filename))
{
CreateFile(ftppath + "/" + filename + "/Advert");//创建广告文件夹
}
if (!CheckFTPFile("Attachments", ftppath + "/" + filename))
{
CreateFile(ftppath + "/" + filename + "/Attachments");//创建附件文件夹
}
if (StatusUpLoad("", filename, path, ftppath))
{
bol = true;
}
}
}
return bol;
}
/// <summary>
/// 上传到ftp
/// </summary>
/// <param name="filename"></param>
/// <param name="filename"></param>
/// <param name="path"></param>
/// <param name="ftppath"></param>
/// <param name="ftpUserID"></param>
/// <param name="ftpPassword"></param>
/// <returns></returns>
private static bool StatusUpLoad(string AdorAt,string filename,string path, string ftppath)
{
bool bol = false;
string url = "";
string _newpath = "";
FileInfo fileInf = new FileInfo(path);
if (AdorAt == "Advert" && AdorAt == "Attachments")
{
url = ftppath + "/" + filename + "/" + AdorAt + "/" + fileInf.Name;
}
else
{
_newpath = CheckFTPFileChildren(ftppath + "/" + filename);
if (_newpath != "")
{
url = _newpath + "/" + fileInf.Name;
}
else
{
new Exception();
}
}
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary = true;
reqFTP.ContentLength = fileInf.Length;
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;
fs = fileInf.OpenRead();
try
{
strm = reqFTP.GetRequestStream();
contentLen = fs.Read(buff, 0, buffLength);
while (contentLen != 0)
{
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
}
strm.Close();
fs.Close();
bol = true;
}
catch (Exception ex)
{
bol = false;
}
return bol;
}
/// <summary>
/// 判断一级文件夹是否存在
/// </summary>
/// <param name="fileName">要判断的文件名</param>
/// <param name="strFTPPath">ftp路径</param>
/// <param name="ftpUserID"></param>
/// <param name="ftpPassword"></param>
/// <returns></returns>
public static bool CheckFTPFile(string fileName, string strFTPPath)
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(strFTPPath));
reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
response = (FtpWebResponse)reqFTP.GetResponse();
ftpStream = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);
List<string> files = new List<string>();
string line = ftpStream.ReadLine();
while (line != null)
{
if (line.Contains("<DIR>"))
{
files.Add(line);
}
line = ftpStream.ReadLine();
}
response.Close();
ftpStream.Close();
bool fag = false;
for (int i = 0; i < files.Count; i++)
{
string[] strfiles = files[i].Split(‘ ‘);
string file = strfiles[strfiles.Length - 1];
if (file == fileName)
{
fag = true;
break;
}
}
return fag;
}
/// <summary>
/// 判断文件是否存在
/// </summary>
/// <param name="fileName">文件</param>
/// <param name="strFTPPath">路径</param>
/// <param name="ftpUserID"></param>
/// <param name="ftpPassword"></param>
/// <returns></returns>
public static string CheckFTPFileChildren(string strFTPPath)
{
int number;
string urlpath = "";
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(strFTPPath));
reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
try
{
response = (FtpWebResponse)reqFTP.GetResponse();
ftpStream = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);
List<string> files = new List<string>();
string line = ftpStream.ReadLine();
while (line != null)
{
if (line.Contains("<DIR>"))
{
files.Add(line);
}
line = ftpStream.ReadLine();
}
response.Close();
ftpStream.Close();
bool fag = false;
int count = files.Count;
for (int i = 0; i < files.Count; i++)
{
string[] strfiles = files[i].Split(‘ ‘);
string file = strfiles[strfiles.Length - 1];
if (file != "Advert" && file != "Attachments")
{
number = CheckFileNumber(strFTPPath + "/" + file);
if (number < 20)
{
urlpath = strFTPPath + "/" + file;
fag = true;
break;
}
}
}
if (!fag)
{
while (true)
{
urlpath = strFTPPath + "/" + (count - 1);
if (CreateFile(urlpath))
{
filenametemp = (count - 1).ToString();
break;
}
count++;
}
}
}
catch
{
urlpath = "";
}
return urlpath;
}
/// <summary>
/// 判断数量
/// </summary>
/// <param name="strFTPPath"></param>
/// <param name="ftpUserID"></param>
/// <param name="ftpPassword"></param>
/// <returns></returns>
public static int CheckFileNumber(string strFTPPath)
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(strFTPPath));
reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
response = (FtpWebResponse)reqFTP.GetResponse();
ftpStream = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);
List<string> files = new List<string>();
string line = ftpStream.ReadLine();
while (line != null)
{
if (!line.Contains("<DIR>"))
{
files.Add(line);
}
line = ftpStream.ReadLine();
}
response.Close();
ftpStream.Close();
return files.Count;
}
/// <summary>
/// 创建文件夹
/// </summary>
/// <param name="dirName"></param>
public static bool CreateFile(string strFTPPath)
{
try
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(strFTPPath));
reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
response = (FtpWebResponse)reqFTP.GetResponse();
strm = response.GetResponseStream();
strm.Close();
response.Close();
return true;
}
catch (Exception ex)
{
return false;
}
}
/// <summary>
/// 删除文件
/// </summary> ftppath=ftppath+"//Test\\6ec5069d-7f17-4ce4-852b-0e1d996aca2f.jpg";
/// <param name="fileName"></param>
public static bool DeleteFile(string path)
{
try
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpUserID);
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
string result = String.Empty;
response = (FtpWebResponse)reqFTP.GetResponse();
long size = response.ContentLength;
strm = response.GetResponseStream();
ftpStream = new StreamReader(strm);
result = ftpStream.ReadToEnd();
strm.Close();
ftpStream.Close();
response.Close();
return true;
}
catch (Exception ex)
{
return false;
}
}
public static void fileRename(string ftpPath, string oldFileName, string newFileName)
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpPath + "/" + oldFileName));
reqFTP.Method = WebRequestMethods.Ftp.Rename;
reqFTP.UseBinary = true;
reqFTP.RenameTo = newFileName;
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
response = (FtpWebResponse)reqFTP.GetResponse();
strm = response.GetResponseStream();
response.Close();
strm.Close();
}
}