VB.Net实现Ftp上传的方法

摘要:
调用方法:UploadFile(“d:lob.rar”,False)'两个参数是要上载的文件的完整路径以及是否继续上载。函数:PublicSubUploadFile(ByValStr_LocalFileNameAsString,ByValBool_ResumeAsPoolean)DimLobSocketAsSocketDimoffsetAsLongDiminutAsFileStreamDimb

调用方式:

UploadFile("d:\lob.rar", False) '  2个参数分别为 准备上传的文件完整路径、是否续传

功能函数:

 Public Sub UploadFile(ByVal Str_LocalFileName As String, ByVal Bool_Resume As Boolean)

        Dim LobSocket As Socket
        Dim offset As Long
        Dim input As FileStream
        Dim bFileNotFound As Boolean
        If (Not Logined()) Then  
            Logined()
        End If
        LobSocket = CreateDataSocket()
        offset = 0
        If (Bool_Resume) Then
            Try
                SetBinaryMode(True)
                offset = GetFileSize(Str_LocalFileName)
            Catch ex As Exception
                offset = 0
            End Try
        End If
        If (offset > 0) Then
            SendCommand("REST " & offset)
            If (Int_Reply <> 350) Then
                offset = 0
            End If
        End If
        SendCommand("STOR " & Path.GetFileName(Str_LocalFileName))
        Str_Reply = ServerReply(True)
        Int_Reply = Int32.Parse(Str_Reply.Substring(0, 3))
        If (Not (Int_Reply = 125 Or Int_Reply = 150)) Then
            MsgBox(Str_Reply.Substring(4))
        End If
        bFileNotFound = False
        If (File.Exists(Str_LocalFileName)) Then
            input = New FileStream(Str_LocalFileName, FileMode.Open)
            If (offset <> 0) Then
                input.Seek(offset, SeekOrigin.Begin)
            End If
            Int_Bytes = input.Read(Byte_Buffer, 0, Byte_Buffer.Length)
            Do While (Int_Bytes > 0)
                LobSocket.Send(Byte_Buffer, Int_Bytes, 0)
                Int_Bytes = input.Read(Byte_Buffer, 0, Byte_Buffer.Length)
            Loop
            input.Close()
        Else
            bFileNotFound = True
        End If
        If (LobSocket.Connected) Then
            LobSocket.Close()
        End If
        If (bFileNotFound) Then
            MsgBox(Str_LocalFileName & "文件未找到,无法上传")
        End If
        Str_Reply = ServerReply(True)
        Int_Reply = Int32.Parse(Str_Reply.Substring(0, 3))
        If (Not (Int_Reply = 226 Or Int_Reply = 250)) Then
            MsgBox(Str_Reply.Substring(4))
        End If

    End Sub

    Public Function GetFileSize(ByVal sFileName As String) As Long

        Dim size As Long
        SendCommand("SIZE " & sFileName)
        size = 0
        Str_Reply = ServerReply(True)
        Int_Reply = Int32.Parse(Str_Reply.Substring(0, 3))
        If (Int_Reply = 213) Then
            size = Int64.Parse(Str_Reply.Substring(4))
        Else
            MsgBox(Str_Reply.Substring(4))
        End If
        Return size

    End Function

免责声明:文章转载自《VB.Net实现Ftp上传的方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇addEventListener的第三个参数详解VC++开发垃圾文件清理软件(上)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[转]SQLserver字符串分割函数

一、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。 CREATE functionGet_StrArrayLength ( @str varchar(1024), --要分割的字符串 @split varchar(10) --分隔符号 ) returns int as b...

springboot SFTP 文件上传下载功能

新增sftp.properies 文件保存 sftp服务器信息 # 协议 sftp.client.protocol=sftp # ip地址 sftp.client.host=改成自己的文件服务器地址 # 端口 sftp.client.port=22 # 用户名 sftp.client.username=root # 密码 sftp.client.passw...

Oracle 多行记录合并/连接/聚合字符串的几种方法

怎么合并多行记录的字符串,一直是oracle新手喜欢问的SQL问题之一,关于这个问题的帖子我看过不下30个了,现在就对这个问题,进行一个总结。-什么是合并多行字符串(连接字符串)呢,例如: 1 SQL> desc test; 2 Name Type Nullable Default Comments 3 ------- -------...

FTP服务2种工作方式详解,PORT方式和PASV方式,(即主动模式和被动模式)

基础 FTP 是仅基于 TCP 的服务,不支持 UDP 。与众不同的是 FTP 使用 2 个端口,一个数据端口和一个命令端口(也可叫做控制端口) 。通常来说这两个端口是 21 -命令端口和 20 -数据端口 。但当我们发现根据( FTP 工作)方式的不同数据端口并不总是 20 时,混乱产生了 。 主动 FTP 主动方式的 FTP 是这样的:客户端从一个任意...

对C#委托和事件委托的理解

委托的声明 public delegate void MyDelegate(string str);注1.委托的定义和方法的定义类似,只是在前面加了一个delegate,但委托不是方法,它是一种类型。是一种特殊的类型,看成是一种新的对象类型比较好理解。用于对与该委托有相 同签名的方法调用。2.委托相当于C++中的函数指针,但它是类型安全的。3.委托是从...

变量命名规范及str类型

变量命名规范: 1.单词之间用_分开 add_num() 2.全局变量,大写 PI,NUMBER() 3.实例变量,以_开头 _example() 4.私有实例变量 __private() 5.普通函数,_动词+名词 _get_name(),_add_age() 6.普通私有函数, __动词+名词...