VB实现SFTP下载和上传的功能

背景

  因为安全原因,需要SFTP协议(sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的一部份,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP)

准备阶段

  需要引用第三方类库Tamir.SharpSSH.dll。链接地址(http://www.tamirgal.com/blog/page/SharpSSH.aspx

我下载的是(Download binaries: SharpSSH-1.1.1.13.bin.zipDotNetSSH 文件

  把Tamir.SharpSSH.dll加载到项目中。

实现阶段

  增加一个类SFTPHelper

  

  1 Imports Tamir.SharpSsh.jsch
  2
  3 Public Class SFTPHelper
  4     Private m_session As Session
  5     Private m_channel As Channel
  6     Private m_sftp As ChannelSftp
  7
  8     Public Sub New(ByVal host As String, ByVal user As String, ByVal pwd As String)
  9         Dim arr() As String = host.Split(":")
 10         Dim ip As String = arr(0)
 11         Dim port As Integer = 22
 12         If (arr.Length > 1) Then
 13             port = Int32.Parse(arr(1))
 14         End If
 15
 16         Dim jsch As JSch = New JSch()
 17         m_session = jsch.getSession(user, ip, port)
 18         Dim ui As MyUserInfo = New MyUserInfo()
 19         ui.setPassword(pwd)
 20         m_session.setUserInfo(ui)
 21     End Sub
 22
 23     ‘SFTP获取文件
 24     Public Function GetInfo(ByVal remotePath As String, ByVal localPath As String) As Boolean
 25         Try
 26             Dim src As Tamir.SharpSsh.java.String = New Tamir.SharpSsh.java.String(remotePath)
 27             Dim dst As Tamir.SharpSsh.java.String = New Tamir.SharpSsh.java.String(localPath)
 28             m_sftp.get(src, dst)
 29             Return True
 30         Catch
 31             Return False
 32         End Try
 33     End Function
 34     ‘SFTP连接状态
 35     Public Property Connected As Boolean
 36         Get
 37             Return m_session.isConnected()
 38         End Get
 39         Set(ByVal value As Boolean)
 40
 41         End Set
 42     End Property
 43
 44     ‘连接SFTP
 45     Public Function Connect() As Boolean
 46         Dim flag As Boolean = False
 47         Try
 48             If (Not Connected()) Then
 49                 m_session.connect()
 50                 m_channel = m_session.openChannel("sftp")
 51                 m_channel.connect()
 52                 m_sftp = m_channel
 53                 flag = True
 54             End If
 55         Catch
 56             flag = False
 57         End Try
 58         Return flag
 59     End Function
 60
 61     ‘断开SFTP
 62     Public Sub Disconnect()
 63
 64         If (Connected()) Then
 65             m_channel.disconnect()
 66             m_session.disconnect()
 67         End If
 68     End Sub
 69
 70     ‘登录验证信息
 71     Public Class MyUserInfo
 72         Implements UserInfo
 73
 74         Dim passwd As String
 75
 76         Public Sub setPassword(ByVal ppasswd As String)
 77             passwd = ppasswd
 78         End Sub
 79         Public Function getPassphrase() As String Implements Tamir.SharpSsh.jsch.UserInfo.getPassphrase
 80             Return Nothing
 81         End Function
 82         Public Function getPassword() As String Implements Tamir.SharpSsh.jsch.UserInfo.getPassword
 83             Return passwd
 84         End Function
 85
 86         Public Function promptPassphrase(ByVal message As String) As Boolean Implements Tamir.SharpSsh.jsch.UserInfo.promptPassphrase
 87             Return True
 88         End Function
 89         Public Function promptPassword(ByVal message As String) As Boolean Implements Tamir.SharpSsh.jsch.UserInfo.promptPassword
 90             Return True
 91         End Function
 92         Public Function promptYesNo(ByVal message As String) As Boolean Implements Tamir.SharpSsh.jsch.UserInfo.promptYesNo
 93             Return True
 94         End Function
 95         Public Sub showMessage(ByVal message As String) Implements Tamir.SharpSsh.jsch.UserInfo.showMessage
 96
 97         End Sub
 98     End Class
 99
100 End Class

    这里我只实现了下载的功能,上传的功能修改后加上。今天暂时不加。

    发现C#转VB面向对象这块不熟悉,所以实现接口那里纠结了一下,后面还好自己乱敲了几个回车就好了,真想说,居然乱敲也行

    调用部分      

 1  Dim RedirectURL As String = loMicUi.GetApKeyValue("RedirectURL")
 2             Dim strLoaclfilePath As String = loMicUi.GetApKeyValue("LoaclFile")
 3
 4             Dim sftp As SFTPHelper = New SFTPHelper(loMicUi.GetApKeyValue("HostIP"), loMicUi.GetApKeyValue("UserName"), loMicUi.GetApKeyValue("Password"))
 5             sftp.Connect()
 6             Dim strSourceFilePath As String = e.Item.Cells(12).Text
 7             Dim strLocalFileNameList() As String = e.Item.Cells(12).Text.Split("\")
 8             Dim strLocalFileName As String = strLocalFileNameList(strLocalFileNameList.Length - 1)
 9             If strSourceFilePath.Substring(0, 2) <> "\\" Then
10                 If strSourceFilePath(0) = "\" Then
11                     strSourceFilePath = "\" & strSourceFilePath
12                 Else
13                     strSourceFilePath = "\\" & strSourceFilePath
14                 End If
15             End If
16             If Not sftp.GetInfo(strSourceFilePath, strLoaclfilePath) Then
17                 Throw New Exception("Can not find file in SFTP path[" & strSourceFilePath & "]")
18             End If
19             sftp.Disconnect()
20             strLoaclfilePath = strLoaclfilePath & "\" & strLocalFileName
21
22             If File.Exists(strLoaclfilePath) Then
23                 Response.Redirect(RedirectURL & strLocalFileName)
24             Else
25                 ‘Can not find path
26                 Throw New Exception("Can not find path[" & strLocalFileName & "]")
27             End If

调用部分

大致上是能够下载下来,也能打开了,另外host,username,password,SFTP上的文件路径以及下载到本地的路径,我都是需要自己在config里面配置,其实也可以直接hardcode在代码里面,不过这样灵活一些。

  

时间: 2024-10-07 23:03:51

VB实现SFTP下载和上传的功能的相关文章

个人电脑配置FTP服务器,四张图搞定。项目需要,并自己写了个客户端实现下载和上传的功能!

测试结果:

重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性

[源码下载] 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之后台任务的新特性 下载和上传的新特性 程序启动前预下载网络资源 后台任务的其它新特性 示例1.本例用于说明 win8.1 中后台下载和上传的新特性(本例用后台下载说明,后台上传与此类似)TransferNew.xaml <Page x:Class="Windows81.BackgroundTask.TransferNew" xmlns="http://schemas.mic

ASIHttpRequest加载网络数据和上传数据功能

使用ASIHttpRequest第三库,需要配置 二, 上传数据功能使用ASIFromDataRequest(可以上传二进制和字符串给服务器) 下面来牛刀小试 //建立一个工程,导入第三方库,在AppDelegate.h #import <UIKit/UIKit.h> #import "ASIFormDataRequest.h" @interface AppDelegate : UIResponder <UIApplicationDelegate,ASIHTTPReq

pikachu靶场-Unsafe Filedownload/Fileupload不安全文件的下载和上传漏洞

一.不安全文件的下载 1.概念   不安全的文件下载概述 文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载. 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞. 此时如果 攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如../..

Linux 下载和上传

下载国内镜像源 CentOS 7 --------------------------------------------------------wget.curl物联网下载文件----------------------------------------------- 默认最小化安装则没有wget命令 没有wget命令先下载wget命令 方法:yum install wget -y wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirror

c++ builder调用sql server的存储过程进行数据的下载和上传

小小的几行代码,在这里搞了一天.好好的一个周六过的无比的难受.代码很简单,但是主要原因是因为在用合作商的软件上传数据的时候有些框框没有勾选. come on....... 1.用两个控件ADOConnection.ADOStoredProc. 1.1 用ADOStoredProc的connection关联到ADOConnection   1.2 ADOConnection连接sql server数据库(两种方式.我在这用的代码连接的,这样比较灵活.另一种方式比简单.不会可以问我,联系方式在下面)

在XShell中使用sz和rz命令下载和上传文件

输入命令:sz filename 回车后弹出一个"浏览文件夹"对话框中,选择保存目录 END 使用rz上传文件 输入命令: rz 回车后弹出一个对话框,选择一个或多个文件,选择"打开" 3 上传到服务器的路径为当前执行rz命令的目录,输入命令: dir 查看上传的文件 END

eclipse通过git代码的下载和上传

Git仓库创建 Eclipse插件安装 本地仓库创建 文件上传 文件下载 原文地址:https://www.cnblogs.com/wujianbo123/p/10851761.html

ansible 通过网络下载和上传文件

1.通过http下载文件,并且不验证证书 - name: download files by https get_url: url: https://robin.org.cn/test.zip dest: /appvol/ansible-test/ validate_certs: no 2. 原文地址:https://www.cnblogs.com/lihuanhuan/p/10957931.html