技术开发 频道

利用FtpWebRequest 类实现上传文件到FTP


【IT168技术文档】

  利用 FtpWebRequest 类实现上传文件到FTP. 先在本机建一个FTP站点,建在别的机器上也行.....
  将 Ftp 的地址和帐号和密码等相关信息写 在 Web.config , 方便管理 , 这里利用 FileUpload 的 FileContent 属性 , 将文件流写到FTP服务器.
  通过一个枚举来记录文件存储方式
enum FileUpLoadMethod { file = 1 , ftp = 2 }
  下面重要的是利用 FtpWebRequest 类实现和FTP服务器的通讯.
FtpWebRequest request; try { request = ( FtpWebRequest )WebRequest.Create( GetUri( server , port , path , "FTP" ) ); } catch { backMsg = "创建FTP请求失败"; return false; } request.Method = WebRequestMethods.Ftp.UploadFile; if( isAnoymous ) { request.Credentials = new NetworkCredential( "anonymous" , userEmail ); } else if( !string.IsNullOrEmpty( domain ) ) { request.Credentials = new NetworkCredential( username , password , domain ); } else { request.Credentials = new NetworkCredential( username , password ); }
  建立好 FtpWebRequest 对象后 , 剩下的事情就是将文件流写入FTP服务器了
Stream requestStream = null; bool success = false; request.ContentLength = inputStream.Length; try { requestStream = request.GetRequestStream( ); success = true; } catch( Exception ex ) { success = false; if( ex is WebException ) { WebException wex = ex as WebException; if( ( ( FtpWebResponse )wex.Response ).StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable ) backMsg = string.Format( "指定的文件路径不存在,错误如下:\n\t{0}" , ex.Message ); } else if( ex is ProtocolViolationException ) backMsg = string.Format( "Protocol wrong:\n{0}\n" , ex.Message ); else backMsg = string.Format( "InvalidOperation:\n{0}\n" , ex.Message ); } if( success ) { try { int count = 0; byte[ ] buffer = new byte[1024]; while( ( count = inputStream.Read( buffer , 0 , 1024 ) ) > 0 ) { requestStream.Write( buffer , 0 , count ); } } catch( Exception ex ) { success = false; backMsg = string.Format( "Write UploadStream wrong:\n{0}" , ex.ToString( ) ); } finally { requestStream.Close( ); requestStream.Dispose( ); } }
0
相关文章