转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
ASP.NET实现FTP文件上载类         ★★★★

ASP.NET实现FTP文件上载类

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2507 更新时间:2009/4/23 10:33:29
   最近,分配给我一个项目,这个项目已成功运转,在这个项目中我需要允许我们的用户经由XML和FTP向另一个公司输出它们的数据。在研究了所有的ASP.NET书籍以后,我们发现任何地方都没有FTP方法,并且花费了一些时间在因特网上搜索相关的例子。我弄清楚了那一点。网络没有自产的FTP支持。我开始去信心并且以A.被迫使用一些旧的ASP代码和Com或者B.停止下来并且购买某些部件。

  不过,我最终偶然发现在Microsoft的MSDN中已经发表过处理FTP的一个完整的类。在这个类中的代码有一点冗长,所以对Microsoft的声誉有影响,雇员必须停下来并且将它们砍去。

‘在Visual Basic.NET 2002中进行调用。你会
‘将数据移动8位。在Visual Basic .NET 2002中,你必须
‘这个数乘以2的8次方
‘端口=parts(4)*(2^8)

‘进行调用,并且接着以Visual Basic .NET 2003进行注释当前行。
port = parts(4) << 8
  我们还使用Visual Studio 2002,所以得到这个注释是一件好事。

  为了测试这个类,我建立了默认的FTP网页,以允许匿名用户进行存取。


图1

图2

  之后,通过代码调用是件轻而易举的事。

Dim ftpClient As New clsFTP("localhost", "", "anonymous", "", 80)
If (ftpClient.Login() = True) Then
 ‘创建一个新文件夹
 ftpClient.CreateDirectory("FTPFOLDERNEW")

‘将新的文件夹设置为活动文件夹。
 ftpClient.ChangeDirectory("FTPFOLDERNEW")

‘设置FTP模式

 ftpClient.SetBinaryMode(True)

‘从你的硬盘上上载一个文件到FTP网页
 ftpClient.UploadFile(Server.MapPath("SampleFile.xml"))

‘对上载文件重命名
 ftpClient.RenameFile("SampleFile.xml", "SampleFile_new.xml")

‘删除一个文件
 ftpClient.DeleteFile("SampleFile_new.xml")

‘总是关闭链接,确保没有任何不在使用中的FTP链接
‘检查你是否登录到FTP服务器,并且接着关闭链接
 ftpClient.CloseConnection()
End If
  浏览ASP.NET论坛,我发现对ASP.NET特征的一个论坛,在那里一个用户注释到拥有一个自己的FTP库该是多么地不错呀。保罗.威尔逊,一个ASP的内行,答复到它已开始2.0了。非常明确它是受欢迎的。

  以下是在MSDN文章中找到的对FTP客户端类的完整代码。怎么使用Visual Basic .NET来存取一个文件传输协议网页呢?

‘这个类允许你使用Visual Basic.NET对FTP网页执行直接链接。
‘这个类支持以下FTP命令:
‘-Upload 一个文件
‘-Download一个文件
‘-Create 一个目录
‘-Remove 一个目录
‘-改变目录
‘-Remove 一个文件
‘-Rename 一个文件
‘-Set 远程用户的用户名
‘-Set 远程用户的密码

Imports System
Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Net.Sockets

‘FTP 类

Public Class clsFTP
#Region "Class Variable Declarations"
Private m_sRemoteHost, m_sRemotePath, m_sRemoteUser As String
Private m_sRemotePassword, m_sMess As String
Private m_iRemotePort, m_iBytes As Int32
Private m_objClientSocket As Socket
Private m_iRetValue As Int32
Private m_bLoggedIn As Boolean
Private m_sMes, m_sReply As String

‘设置用户来对FTP服务器读取和写入数据的数据包的大小
‘对下列具体大小

Public Const BLOCK_SIZE = 512
Private m_aBuffer(BLOCK_SIZE) As Byte
Private ASCII As Encoding = Encoding.ASCII
Public flag_bool As Boolean
‘普通变量定义
Private m_sMessageString As String
#End Region

#Region "Class Constructors"

‘Main类的构造器
Public Sub New()
 m_sRemoteHost = "microsoft"
 m_sRemotePath = "."
 m_sRemoteUser = "anonymous"
 m_sRemotePassword = ""
 m_sMessageString = ""
 m_iRemotePort = 21
 m_bLoggedIn = False
End Sub

‘参数化的构造器

Public Sub New(ByVal sRemoteHost As String, _
ByVal sRemotePath As String, _
ByVal sRemoteUser As String, _
ByVal sRemotePassword As String, _
ByVal iRemotePort As Int32)

 m_sRemoteHost = sRemoteHost
 m_sRemotePath = sRemotePath
 m_sRemoteUser = sRemoteUser
 m_sRemotePassword = sRemotePassword
 m_sMessageString = ""
 m_iRemotePort = 21
 m_bLoggedIn = False

End Sub

#End Region

#Region "Public Properties"

‘设置或得到你想链接的FTP服务器的名称

Public Property RemoteHostFTPServer() As String
 ‘得到FTP服务器的名称
 Get
  Return m_sRemoteHost
 End Get

‘设置FTP服务器的名称

 Set(ByVal Value As String)
  m_sRemoteHost = Value
 End Set
End Property



‘设置或得到你想链接的FTP服务器的FTP端口

Public Property RemotePort() As Int32

‘得到FTP端口号

 Get
  Return m_iRemotePort
 End Get

‘设置FTP端口数号

 Set(ByVal Value As Int32)
  m_iRemotePort = Value
 End Set
End Property

‘设置或得到你想链接的FTP服务器的远程路径

Public Property RemotePath() As String

 ‘得到远程路径
 Get
  Return m_sRemotePath
 End Get
 ‘设置远程路径
 Set(ByVal Value As String)
  m_sRemotePath = Value
 End Set
End Property

‘设置你想链接的远程FTP服务器的密码

Public Property RemotePassword() As String
 Get
  Return m_sRemotePassword
 End Get
 Set(ByVal Value As String)
  m_sRemotePassword = Value
 End Set
End Property

‘设置或得到你想链接远程的FTP服务器的用户

Public Property RemoteUser() As String
 Get
  Return m_sRemoteUser
 End Get

 Set(ByVal Value As String)
  m_sRemoteUser = Value
 End Set
End Property

‘设置messagestring类

Public Property MessageString() As String
 Get
  Return m_sMessageString
 End Get

 Set(ByVal Value As String)
  m_sMessageString = Value
 End Set
End Property

#End Region
#Region "Public Subs and Functions"

‘从文件系统中返回一个文件列表。在string()函数中返回文件。

Public Function GetFileList(ByVal sMask As String) As String()
 Dim cSocket As Socket
 Dim bytes As Int32
 Dim seperator As Char = ControlChars.Lf
 Dim mess() As String

 m_sMes = ""
‘检查你是否登录到FTP服务器上
 If (Not (m_bLoggedIn)) Then
  Login()
 End If

 cSocket = CreateDataSocket()
‘发送FTP命令

 SendCommand("NLST " & sMask)
 If (Not (m_iRetValue = 150 Or m_iRetValue = 125)) Then
  MessageString = m_sReply
  Throw New IOException(m_sReply.Substring(4))
 End If
 m_sMes = ""
 Do While (True)
  m_aBuffer.Clear(m_aBuffer, 0, m_aBuffer.Length)
  bytes = cSocket.Receive(m_aBuffer, m_aBuffer.Length, 0)
  m_sMes += ASCII.GetString(m_aBuffer, 0, bytes)

  If (bytes < m_aBuffer.Length) Then
   Exit Do
  End If
 Loop

 mess = m_sMes.Split(seperator)
 cSocket.Close()
 ReadReply()

 If (m_iRetValue <> 226) Then
  MessageString = m_sReply
  Throw New IOException(m_sReply.Substring(4))
 End If

 Return mess
End Function

‘得到FTP服务器上的文件大小
Public Function GetFileSize(ByVal sFileName As String) As Long
 Dim size As Long

 If (Not (m_bLoggedIn)) Then
  Login()
 End If

 ‘发送一个FTP命令
 SendCommand("SIZE " & sFileName)
 size = 0

 If (m_iRetValue = 213) Then
  size = Int64.Parse(m_sReply.Substring(4))
 Else
  MessageString = m_sReply
  Throw New IOException(m_sReply.Substring(4))
 End If

 Return size
End Function

‘登录FTP服务器

Public Function Login() As Boolean
 m_objClientSocket = _
  New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
 Dim ep As New IPEndPoint(Dns.Resolve(m_sRemoteHost).AddressList(0), m_iRemotePort)

 Try
  m_objClientSocket.Connect(ep)
 Catch ex As Exception
  MessageString = m_sReply
  Throw New IOException("Cannot connect to the remote server")
 End Try

 ReadReply()
 If (m_iRetValue <> 220) Then
  CloseConnection()
  MessageString = m_sReply
  Throw New IOException(m_sReply.Substring(4))
 End If

 ‘为了发送一个对服务器的用户登录ID,发送一个FTP命令

 SendCommand("USER " & m_sRemoteUser)

 If (Not (m_iRetValue = 331 Or m_iRetValue = 230)) Then
  Cleanup()
  MessageString = m_sReply
  Throw New IOException(m_sReply.Substring(4))
 End If

 If (m_iRetValue <> 230) Then
  ‘为了发送一个对服务器的用户密码,发送一个FTP命令
  SendCommand("PASS " & m_sRemotePassword)
  If (Not (m_iRetValue = 230 Or m_iRetValue = 202)) Then
   Cleanup()
   MessageString = m_sReply
   Throw New IOException(m_sReply.Substring(4))
  End If
 End If

 m_bLoggedIn = True
 ‘为了改变映射的远程服务器的文件夹的目录,调用用户定义的ChangeDirectory函数
 ChangeDirectory(m_sRemotePath)

 ‘返回最终结果
 Return m_bLoggedIn
End Function

‘如果模式值为真,对下载设置为二进制模式。否则,设置为ASCII模式

Public Sub SetBinaryMode(ByVal bMode As Boolean)
 If (bMode) Then
  ‘发送FTP命令,设置为二进制模式
  ‘(TYPE是一种用作说明请求类型的FTP命令.)
  SendCommand("TYPE I")
 Else
  ‘发送FTP命令,设置ASCII模式。
  ‘(TYPE是一种用作说明请求类型的FTP命令。)
  SendCommand("TYPE A")
 End If
 If (m_iRetValue <> 200) Then
  MessageString = m_sReply
  Throw New IOException(m_sReply.Substring(4))
 End If
End Sub

‘向配置好的本地目录下载一个文件。保持文件名一样。

Public Sub DownloadFile(ByVal sFileName As String)
 DownloadFile(sFileName, "", False)
End Sub

 ‘向一个配置好的本地文件夹下载一个远程文件。保持文件名一样。 Public Sub DownloadFile(ByVal sFileName As String, _

ByVal bResume As Boolean)

DownloadFile(sFileName, "", bResume)

End Sub

‘对本地文件名下载一个远程文件。你必须包含一个路径。

‘本地文件名将会创建或者将会被重写,但是路径必须存在。

Public Sub DownloadFile(ByVal sFileName As String, _
 ByVal sLocalFileName As String)
 DownloadFile(sFileName, sLocalFileName, False)
End Sub

 ‘对一个本地文件名下载一个远程文件。你必须包含一个路径。设置恢复标志。本地文件名将会被创建或被重写,但是本地路径必须存在。

Public Sub DownloadFile(ByVal sFileName As String, _
 ByVal sLocalFileName As String, _
 ByVal bResume As Boolean)

 Dim st As Stream
 Dim output As FileStream
 Dim cSocket As Socket
 Dim offset, npos As Long

[1] [2] [3]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台