using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.IO;
using System.Text;
namespace TecoWebService.Utility
{
/// <summary>
/// 文件夹下的内容项信息
/// </summary>
public class DirItemInfo
{
/// <summary>
/// 文件所在目录,(父目录)
/// </summary>
public string ParentFolder { set; get; }
/// <summary>
/// 文件类型 0:是文件,1是文件夹
/// </summary>
public int FileType { set; get; }
/// <summary>
/// 文件名
/// </summary>
public string Name { set; get; }
/// <summary>
/// 文件全路径
/// </summary>
public string FullFileName { set; get; }
}
public class FtpUtil
{
private string ftpUserName;
private string ftpPassword;
/// <summary>
/// 连接服务器
/// </summary>
/// <param name="server">服务器地址(IP)</param>
/// <param name="userName">登录名</param>
/// <param name="pwd">密码</param>
/// <returns></returns>
public void InitFtpParam(string userName, string pwd)
{
ftpUserName = userName;
ftpPassword = pwd;
}
/// <summary>
/// 上传本地文件夹到ftp
/// </summary>
/// <param name="localDir">本地文件目录</param>
/// <param name="ftpPath">目标ftp目录</param>
/// <param name="dirName">文件夹名称</param>
public string UploadDirectory(string localDir, string ftpPath, string dirName)
{
localDir = FolderFormat(localDir, '\\');
ftpPath = FolderFormat(ftpPath, '/');
string dir = localDir + dirName + @"\"; //获取当前目录(父目录在目录名)
if (!Directory.Exists(dir))
{
return dir + "目录不存在";
}
if (DirExist(ftpPath, dirName))
{
// 删除指定目录
DeleteDir(ftpPath, dirName);
}
// 创建文件夹
MakeDir(ftpPath, dirName);
List<List<string>> infos = GetLocalDirDetails(dir); //获取当前目录下的所有文件和文件夹
//先上传文件
for (int i = 0; i < infos[0].Count; i++)
{
Console.WriteLine(infos[0][i]);
UploadFile(dir + infos[0][i], ftpPath + dirName + @"/" + infos[0][i]);
}
//再处理文件夹
for (int i = 0; i < infos[1].Count; i++)
{
UploadDirectory(dir, ftpPath + dirName + @"/", infos[1][i]);
}
return "0";
}
/// <summary>
/// 上传文件到ftp
/// </summary>
/// <param name="localFile"></param>
/// <param name="ftpPath"></param>
/// <returns></returns>
public bool UploadFile(string localFile, string ftpFile)
{
if (!File.Exists(localFile))
{
return false;
}
using (FileStream fs = new FileInfo(localFile).OpenRead())
{
byte[] fileBuff = new byte[fs.Length];
fs.Read(fileBuff, 0, Convert.ToInt32(fs.Length));
return UploadFile(fileBuff, localFile.Length ,ftpFile);
}
}
/// <summary>
/// 上传文件
/// </summary>
/// <param name="fs">文件流</param>
/// <param name="ftpFile">ftp文件地址</param>
/// <returns></returns>
public bool UploadFile(byte[] fileBuff, int fileNameLen, string ftpFile)
{
try
{
FtpWebRequest ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpFile));
ftpWebRequest.Credentials = new NetworkCredential(ftpUserName, ftpPassword);
ftpWebRequest.UseBinary = true;
ftp