/// <summary>
/// 上传文件到FTP上
/// </summary>
/// <returns></returns>
public static string UpFileToFTP<T>(T obj, string fileName, string ftpSetcer, out string msg)
{
msg = string.Empty;
//var ftpServerIP = CommonConst.FTPService;
FtpWebRequest reqFTP;
try
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpSetcer + "out/" + fileName));
reqFTP.Credentials = new NetworkCredential(CommonConst.CoscoFtpAcount, CommonConst.CoscoAcountPwd);
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary = true;
var utf8WithoutBom = new UTF8Encoding(false);
Stream strm = reqFTP.GetRequestStream();
Type t = obj.GetType();
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
XmlSerializer serializer = new XmlSerializer(t);
XmlTextWriter writer = new XmlTextWriter(strm, utf8WithoutBom);
writer.Formatting = Formatting.Indented;
serializer.Serialize(writer, obj, ns);
strm.Close();
return "success";
}
catch (Exception ex)
{
msg = "ftp上传失败 :" + ex.Message;
return "ftp上传失败";
}
}
/// <summary>
/// 去除文件bom头后的字符
/// </summary>
/// <param name="buffer"></param>
/// <returns></returns>
public static string GetUTF8String(byte[] buffer)
{
if (buffer == null)
return null;
if (buffer.Length <= 3)
{
return Encoding.UTF8.GetString(buffer);
}
byte[] bomBuffer = new byte[] { 0xef, 0xbb, 0xbf };
if (buffer[0] == bomBuffer[0]
&& buffer[1] == bomBuffer[1]
&& buffer[2] == bomBuffer[2])
{
return new UTF8Encoding(false).GetString(buffer, 3, buffer.Length - 3);
}
return Encoding.UTF8.GetString(buffer);
}
/// <summary>
/// 从ftp服务器上获得文件列表
/// </summary>
/// <param name="RequedstPath">服务器下的相对路径</param>
/// <returns></returns>
public static List<string> GetFile(out string msgerr)
{
var strs = new List<string>();
msgerr = string.Empty;
string uri = CommonConst.FTPService + "in"; //目标路径 path为服务器地址
try
{
FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
// ftp用户名和密码
reqFTP.Credentials = new NetworkCredential(CommonConst.CoscoFtpAcount, CommonConst.CoscoAcountPwd);
reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
WebResponse response = reqFTP.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名
string line = reader.ReadLine();
while (line != null)
{
if (!line.Contains("<DIR>"))
{
string msg = line.Substring(39).Trim();
if (msg.ToUpper().Contains("BCXML"))
{
strs.Add(msg);
}
//strs.Add(msg);
}
line = reader.ReadLine();
}
reader.Close();
response.Close();
return strs;
}
catch (Exception ex)
{
msgerr = "ftpAddress +> " + uri + " Exception =>" + ex.Message;
}
return strs;
}
/// <summary>
/// 从ftp服务器上获取文件并将内容全部转换成string返回
/// </summary>
/// <param name="fileName"></param>
/// <param name="dir"></param>
/// <returns></returns>
public static string GetFileStr(string fileName, out string msg)
{
FtpWebRequest reqFTP;
msg = string.Empty;
string uri = CommonConst.FTPService + "in/"; //目标路径 path为服务器地址
try
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri + fileName));
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(CommonConst.CoscoFtpAcount, CommonConst.CoscoAcountPwd);
reqFTP.UsePassive = true; //选择主动还是被动模式 , 这句要加上的。
reqFTP.KeepAlive = false;//一定要设置此属性,否则一次性下载多个文件的时候,会出现异常。
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
StreamReader reader = new StreamReader(ftpStream);
//XmlSerializer xs = new XmlSerializer(typeof(T));
//var result = (T)xs.Deserialize(reader);
var result = reader.ReadToEnd();
reader.Close();
ftpStream.Close();
response.Close();
return result;
}
catch (Exception ex)
{
msg = "解析XML失败";
return "解析XML失败" + ex.Message;
}
}
/// <summary>
/// 读取文件目录下所有的文件名称,包括文件夹名称
/// </summary>
/// <param name="ftpAdd">传过来的文件夹路径</param>
/// <returns>返回的文件或文件夹名称</returns>
public static string[] GetFtpFileList(string ftpAdd)
{
string url = CommonConst.FTPService + "in";
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(new Uri(url));
ftpRequest.UseBinary = true;
ftpRequest.Credentials = new NetworkCredential(CommonConst.CoscoFtpAcount, CommonConst.CoscoAcountPwd);
if (ftpRequest != null)
{
StringBuilder fileListBuilder = new StringBuilder();
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;//只得到文件或文件夹的名称
try
{
WebResponse ftpResponse = ftpRequest.GetResponse();
StreamReader ftpFileListReader = new StreamReader(ftpResponse.GetResponseStream(), Encoding.Default);
string line = ftpFileListReader.ReadLine();
while (line != null)
{
fileListBuilder.Append(line);
fileListBuilder.Append("@");//每个文件名称之间用@符号隔开,便于前端调用的时候解析
line = ftpFileListReader.ReadLine();
}
ftpFileListReader.Close();
ftpResponse.Close();
fileListBuilder.Remove(fileListBuilder.ToString().LastIndexOf("@"), 1);
return fileListBuilder.ToString().Split('@');//返回得到的数组
}
catch (Exception ex)
{
return null;
}
}
else
{
return null;
}
}
public static void DownLoadFileFromFTP()
{
string filePath = "d:\\";
string fileName = "lhking.txt"; //文件下载之后要保存的路径和文件名
FtpWebRequest reqFTP;
try
{
var ftpServerIP = CommonConst.FTPService;
FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);
string filename = "ip.txt";
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpServerIP + "in/" + filename));
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential("l", "l");
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
long cl = response.ContentLength;
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
ftpStream.Close();
outputStream.Close();
response.Close();
}
catch (Exception err)
{
//MessageBox.Show(err.Message, "Download Error");
}
}