你的位置:首页 > ASP.net教程

[ASP.net教程]c#实现FTP上传


 1     /// <summary> 2     /// 上传文件 3     /// </summary> 4     /// <param name="fileinfo">需要上传的文件</param> 5     /// <param name="targetDir">目标路径</param> 6     /// <param name="hostname">ftp地址</param> 7     /// <param name="username">ftp用户名</param> 8     /// <param name="password">ftp密码</param> 9     public static void UploadFile(FileInfo fileinfo, string targetDir, string hostname, string username, string password) 10     { 11       //1. check target 12       string target; 13       if (targetDir.Trim() == "") 14       { 15         return; 16       } 17       target = Guid.NewGuid().ToString(); //使用临时文件名 18  19  20       string URI = "FTP://" + hostname + "/" + targetDir + "/" + target; 21       ///WebClient webcl = new WebClient(); 22       System.Net.FtpWebRequest ftp = GetRequest(URI, username, password); 23  24       //设置FTP命令 设置所要执行的FTP命令, 25       //ftp.Method = System.Net.WebRequestMethods.Ftp.ListDirectoryDetails;//假设此处为显示指定路径下的文件列表 26       ftp.Method = System.Net.WebRequestMethods.Ftp.UploadFile; 27       //指定文件传输的数据类型 28       ftp.UseBinary = true; 29       ftp.UsePassive = true; 30  31       //告诉ftp文件大小 32       ftp.ContentLength = fileinfo.Length; 33       //缓冲大小设置为2KB 34       const int BufferSize = 2048; 35       byte[] content = new byte[BufferSize - 1 + 1]; 36       int dataRead; 37  38       //打开一个文件流 (System.IO.FileStream) 去读上传的文件 39       using (FileStream fs = fileinfo.OpenRead()) 40       { 41         try 42         { 43           //把上传的文件写入流 44           using (Stream rs = ftp.GetRequestStream()) 45           { 46             do 47             { 48               //每次读文件流的2KB 49               dataRead = fs.Read(content, 0, BufferSize); 50               rs.Write(content, 0, dataRead); 51             } while (!(dataRead < BufferSize)); 52             rs.Close(); 53           } 54  55         } 56         catch (Exception ex) { } 57         finally 58         { 59           fs.Close(); 60         } 61  62       } 63  64       ftp = null; 65       //设置FTP命令 66       ftp = GetRequest(URI, username, password); 67       ftp.Method = System.Net.WebRequestMethods.Ftp.Rename; //改名 68       ftp.RenameTo = fileinfo.Name; 69       try 70       { 71         ftp.GetResponse(); 72       } 73       catch (Exception ex) 74       { 75         ftp = GetRequest(URI, username, password); 76         ftp.Method = System.Net.WebRequestMethods.Ftp.DeleteFile; //删除 77         ftp.GetResponse(); 78         throw ex; 79       } 80       finally 81       { 82         //fileinfo.Delete(); 83       } 84  85       // 可以记录一个日志 "上传" + fileinfo.FullName + "上传到" + "FTP://" + hostname + "/" + targetDir + "/" + fileinfo.Name + "成功." ); 86       ftp = null; 87  88       #region 89       /***** 90        *FtpWebResponse 91        * ****/ 92       //FtpWebResponse ftpWebResponse = (FtpWebResponse)ftp.GetResponse(); 93       #endregion 94     } 95  96     private static FtpWebRequest GetRequest(string URI, string username, string password) 97     { 98       //根据服务器信息FtpWebRequest创建类的对象 99       FtpWebRequest result = (FtpWebRequest)FtpWebRequest.Create(URI);100       //提供身份验证信息101       result.Credentials = new System.Net.NetworkCredential(username, password);102       //设置请求完成之后是否保持到FTP服务器的控制连接,默认值为true103       result.KeepAlive = false;104       return result;105     }