以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]关于sftp的vb代码改写  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=126372)

--  作者:mositu
--  发布时间:2018/10/19 15:01:00
--  [求助]关于sftp的vb代码改写
做的一个项目,大多数地方都是使用ftp,就有一小撮文件很重要,想用sftp,服务器上sftp已建立,foxtable项目已经外部引用了Tamir.SharpSSH.dll。
网上可以找到很多c#代码,显然无法直接使用,好不容易找到一段vb代码,依然有不少小问题,请专家能不能给予改编,使其能放在foxtable里使用,自己实在是折腾的心力交瘁

实现的功能:1、能获得指定目录的所有文件名称的集合,2、能下载指定文件就行。

Dim jsch As Tamir.SharpSsh.jsch.JSch = New Tamir.SharpSsh.jsch.JSch

Public Class SFTPHelper
    Private m_session As Session
    Private m_channel As Channel
    Private m_sftp As ChannelSftp

    Public Sub New(ByVal host As String, ByVal user As String, ByVal pwd As String)
        Dim arr() As String = host.Split(":")
        Dim ip As String = arr(0)
        Dim port As Integer = 22
        If (arr.Length > 1) Then
            port = Int32.Parse(arr(1))
        End If

        Dim jsch As JSch = New JSch()
        m_session = jsch.getSession(user, ip, port)
        Dim ui As MyUserInfo = New MyUserInfo()
        ui.setPassword(pwd)
        m_session.setUserInfo(ui)
    End Sub

    \'SFTP获取文件        
    Public Function GetInfo(ByVal remotePath As String, ByVal localPath As String) As Boolean
        Try
            Dim src As Tamir.SharpSsh.java.String = New Tamir.SharpSsh.java.String(remotePath)
            Dim dst As Tamir.SharpSsh.java.String = New Tamir.SharpSsh.java.String(localPath)
            m_sftp.get(src, dst)
            Return True
        Catch
            Return False
        End Try
    End Function
    \'SFTP连接状态        
    Public Property Connected As Boolean
        Get
            Return m_session.isConnected()
        End Get
        Set(ByVal value As Boolean)

        End Set
    End Property

    \'连接SFTP        
    Public Function Connect() As Boolean
        Dim flag As Boolean = False
        Try
            If (Not Connected()) Then
                m_session.connect()
                m_channel = m_session.openChannel("sftp")
                m_channel.connect()
                m_sftp = m_channel
                flag = True
            End If
        Catch
            flag = False
        End Try
        Return flag
    End Function

    \'断开SFTP        
    Public Sub Disconnect()

        If (Connected()) Then
            m_channel.disconnect()
            m_session.disconnect()
        End If
    End Sub

    \'登录验证信息        
    Public Class MyUserInfo
        Implements UserInfo

        Dim passwd As String

        Public Sub setPassword(ByVal ppasswd As String)
            passwd = ppasswd
        End Sub
        Public Function getPassphrase() As String Implements Tamir.SharpSsh.jsch.UserInfo.getPassphrase
            Return Nothing
        End Function
        Public Function getPassword() As String Implements Tamir.SharpSsh.jsch.UserInfo.getPassword
            Return passwd
        End Function

        Public Function promptPassphrase(ByVal message As String) As Boolean Implements Tamir.SharpSsh.jsch.UserInfo.promptPassphrase
            Return True
        End Function
        Public Function promptPassword(ByVal message As String) As Boolean Implements Tamir.SharpSsh.jsch.UserInfo.promptPassword
            Return True
        End Function
        Public Function promptYesNo(ByVal message As String) As Boolean Implements Tamir.SharpSsh.jsch.UserInfo.promptYesNo
            Return True
        End Function
        Public Sub showMessage(ByVal message As String) Implements Tamir.SharpSsh.jsch.UserInfo.showMessage

        End Sub
    End Class

End Class


--  作者:有点蓝
--  发布时间:2018/10/19 15:18:00
--  
没有环境测试。安装一个vs,把别人的例子调通了再到Foxtable里使用
--  作者:mositu
--  发布时间:2018/11/13 19:10:00
--  
此贴不需要了,请问如何删除此贴