.net 使用FtpClient进行附件的上传
/// <summary> /// FTP附件上传 /// </summary> /// <param name="listzp"></param> public void FTPUpload(List<T_MED_DUOMEITI> listzp) { string baseDirectory = System.Configuration.ConfigurationManager.AppSettings["FileUrl"];//本地附件的根目录后面做拼接用,比如E:\文件夹\文件夹 string strServer = System.Configuration.ConfigurationManager.AppSettings["FTP_IP"];//FTP的IP地址 string port = System.Configuration.ConfigurationManager.AppSettings["FTP_Port"];//FTP的端口号 string strUser = System.Configuration.ConfigurationManager.AppSettings["FTP_UserName"];//FTP的登录名 string strPassword = System.Configuration.ConfigurationManager.AppSettings["FTP_Password"];//FTP的密码 //连接FTP //Log.SaveNote("FileUrl:" + baseDirectory + "strServer:" + strServer + "port:" + port + "strUser:" + strUser + "strPassword:" + strPassword); FtpClient ftp = new FtpClient(); ftp.Host = strServer; ftp.Port = Convert.ToInt32(port); ftp.Credentials = new NetworkCredential(strUser, strPassword); ftp.Connect(); //Log.SaveNote("FTP连接成功"); //循环所有附件 foreach (var item in listzp) {
//如果FTP处于关闭状态就重新打开 if (!ftp.IsConnected) { ftp.Host = strServer; ftp.Port = Convert.ToInt32(port); ftp.Credentials = new NetworkCredential(strUser, strPassword); ftp.Connect(); } //判断有无具体附件 var fileFullUrl = baseDirectory + item.PATH;//如E:\文件夹\文件夹\123.jpg //Log.SaveNote("fileFullUrl:" + fileFullUrl); //有物理照片的情况下才进行传输 if (File.Exists(fileFullUrl)) {
//item.PATH是数据库存储的路径,做截取是为了取前面的路径,如 /文件夹/456.jpg string Savepath = item.PATH.Substring(0, item.PATH.LastIndexOf(@"\"));
//item.MINGCHENG就是本地附件的物理名称,如123.jpg
string file = item.MINGCHENG; //判断FTP上有无该路径,没有路径就创建 if (!ftp.DirectoryExists(Savepath)) { ftp.CreateDirectory(Savepath); } //文件不存在的时候才传输
//数据库中存的是反斜杠,所以这里需要转换下 var exitFile = item.PATH.Replace(@"\", "/"); if (!ftp.FileExists(exitFile)) { Log.SaveNote("开始传输文件:" + fileFullUrl); using (var fileStream = File.OpenRead(fileFullUrl)) using (var ftpStream = ftp.OpenWrite(item.PATH)) { var buffer = new byte[8 * 1024]; int uu; while ((uu = fileStream.Read(buffer, 0, buffer.Length)) > 0) { ftpStream.Write(buffer, 0, uu); } } } } } }