上传图片到FTP的实例

 1             string imgPath = string.Empty;//图片路径
 2             string ftpFileName = System.Configuration.ConfigurationManager.AppSettings["QuickLink"];//在配置文件中定义存图片的文件夹
 3             HttpFileCollectionBase httpFiles = Request.Files;
 4 
 5             #region 上传图片相关处理
 6             HttpPostedFileBase imgPathFile = httpFiles["fileImgPath"];  //获取界面传来的图片路径           
 7             //如果界面传来的文件名不为空,则把图片上传到FTP,并返回FTP路径 
 8             if (!string.IsNullOrEmpty(imgPathFile.FileName))
 9             {
10                 imgPath = FtpUpImage(ftpFileName, link.ID.ToString(), imgPathFile);//把图片上传至FTP
11                 link.ImgPath = imgPath;
12             }
13             #endregion
 1        #region FTP文件上传
 2         /// <summary>
 3         /// 快速链接图片上传
 4         /// </summary>
 5         /// <param name="path">文件路径</param>
 6         /// <param name="fileName">文件夹名</param>
 7         /// <returns></returns>
 8         public string FtpUpImage(string ftpFileName, string linkId, HttpPostedFileBase uploadImage)
 9         {
10             string imgPath = string.Empty;   //图片路径
11             string fileName = string.Empty;  //文件名           
12             string ftpPath = string.Empty;   //FTP路径
13 
14             fileName = uploadImage.FileName;//上传的图片名称
15 
16             int len = fileName.Split('.').Length;
17             string extName = fileName.Split('.')[len - 1].ToString();//文件后缀名                 
18             string fName = linkId + "." + extName;//文件名
19             //判断本地是否存在这个文件夹
20             if (!Directory.Exists(Server.MapPath("../UploadFile/LinkImage")))
21             {
22                 Directory.CreateDirectory(Server.MapPath("../UploadFile/LinkImage"));
23             }
24             imgPath = Server.MapPath("../UploadFile/LinkImage/") + fName;//本地路径
25             uploadImage.SaveAs(imgPath); //保存到项目组中                   
26 
27             #region 上传至FTP
28             //判断文件夹是否存在,并上传至FTP
29             if (CommonHelper.FtpCreateFolder(ftpFileName))
30             {
31                 string FTPServiceIP = ConfigurationManager.AppSettings["FTPServiceIP"]; //FTP服务器地址
32                 string folderPath = string.Format("ftp://{0}/{1}", FTPServiceIP, ftpFileName); //FTP的文件夹路径
33                 string fPath = string.Format("ftp://{0}/{1}/{2}", FTPServiceIP, ftpFileName, fName); //FTP的文件路径
34 
35                 //判断文件是否已存在,如果已存在则先删除文件再上传
37                 if (!saveList.CheckDirectory(folderPath, fName))
38                 {
39                     ftpPath = CommonHelper.FtpUploadCommon(imgPath, ftpFileName);//获取FTP的图片路径  
40                 }
41                 else
42                 {
43                     saveList.DeleteFile(fPath);//删除FTP已存在的文件
44                     ftpPath = CommonHelper.FtpUploadCommon(imgPath, ftpFileName);//获取FTP的图片路径  
45                 }
46             }
47             #endregion
51 
52             //删除本地存储的图片
53             FileInfo file = new FileInfo(imgPath);
54             if (file.Exists)
55             {
56                 file.Delete(); //删除单个文件   
57             }
59         
60             return ftpPath;
61         }
62         #endregion

//FTP上传公用方法
 1   /// <summary>
 2         /// FTP上传公用方法
 3         /// </summary>
 4         /// <param name="filename">源文件物理地址</param>
 5         /// <param name="ftpFolderName">Ftp服务器上目录名称</param>
 6         public static string FtpUploadCommon(string filename, string ftpFolderName)
 7         {
 8             string ftpServerIP = ConfigurationManager.AppSettings["FTPServiceIP"];
 9             string ftpUserID = ConfigurationManager.AppSettings["FTPUserName"];
10             string ftpPassword = ConfigurationManager.AppSettings["FTPPwd"];
11             string excelFolder = ftpFolderName;
12             string downLoadIp = ConfigurationManager.AppSettings["FTPView"];
13             if (!downLoadIp.Substring(10).Contains("/"))
14             {
15                 downLoadIp = downLoadIp + "/";
16             }
17 
18             FileInfo fileInf = new FileInfo(filename);
19 
20             string downloadUrl = (downLoadIp.Contains("http://") ? string.Empty : "http://") + downLoadIp + excelFolder + "/" + fileInf.Name;
21             FtpWebRequest reqFTP;
22 
23             // 根据uri创建FtpWebRequest对象 
24             reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + excelFolder + "/" + fileInf.Name));
25 
26             // ftp用户名和密码
27             reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
28 
29             // 默认为true,连接不会被关闭
30             // 在一个命令之后被执行
31             reqFTP.KeepAlive = false;
32 
33             // 指定执行什么命令
34             reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
35 
36             // 指定数据传输类型
37             reqFTP.UseBinary = true;
38 
39             // 上传文件时通知服务器文件的大小
40             reqFTP.ContentLength = fileInf.Length;
41 
42             // 缓冲大小设置为2kb
43             int buffLength = 2048;
44 
45             byte[] buff = new byte[buffLength];
46             int contentLen;
47 
48             // 打开一个文件流 (System.IO.FileStream) 去读上传的文件
49             FileStream fs = fileInf.OpenRead();
50             try
51             {
52                 // 把上传的文件写入流
53                 Stream strm = reqFTP.GetRequestStream();
54 
55                 // 每次读文件流的2kb
56                 contentLen = fs.Read(buff, 0, buffLength);
57 
58                 // 流内容没有结束
59                 while (contentLen != 0)
60                 {
61                     // 把内容从file stream 写入 upload stream
62                     strm.Write(buff, 0, contentLen);
63 
64                     contentLen = fs.Read(buff, 0, buffLength);
65                 }
66 
67                 // 关闭两个流
68                 strm.Close();
69                 fs.Close();
70                 return downloadUrl;
71             }
72             catch (Exception ex)
73             {
74                 HttpContext.Current.Response.Write("Upload Error:" + ex.Message);
75                 return string.Empty;
76             }
77         }
FtpUploadCommon
 // FTP删除操作
 1   #region FTP删除操作
 2         /// <summary>
 3         /// FTP删除操作
 4         /// </summary>
 5         /// <param name="ftpPath">路径</param>
 6         /// <param name="userId">用户名</param>
 7         /// <param name="pwd">密码</param>
 8         /// <param name="fileName">文件名</param>
 9         /// <returns></returns>
10         public string DeleteFile(string ftpPath)
11         {
12             string sRet = "删除成功!";
13             FtpWebResponse Respose = null;
14             FtpWebRequest reqFTP = null;
15             Stream localfile = null;
16             Stream stream = null;
17             try
18             {
19                 //根据uri创建FtpWebRequest对象  
20                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpPath));
21 
22                 //提供账号密码的验证  
23                 reqFTP.Credentials = new NetworkCredential(FTPUserName, FTPPwd);
24 
25                 //默认为true是上传完后不会关闭FTP连接  
26                 reqFTP.KeepAlive = false;
27 
28                 //执行删除操作
29                 reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
30 
31                 Respose = (FtpWebResponse)reqFTP.GetResponse();
32             }
33             catch (Exception ex)
34             {
35                 sRet = ex.Message;
36                 LogHelper.Error("Error", "TOpOfferSaveListBusiness.DeleteFile", ex);
37             }
38 
39             finally
40             {
41                 //关闭连接跟流
42                 if (Respose != null)
43                     Respose.Close();
44                 if (localfile != null)
45                     localfile.Close();
46                 if (stream != null)
47                     stream.Close();
48             }
49 
50             //返回执行状态
51             return sRet;
52         }
53  #endregion
DeleteFile


 
原文地址:https://www.cnblogs.com/sunny0515/p/3292914.html