https://blog.csdn.net/dzweather/article/details/51429107

FtpWebRequest与FtpWebResponse类用来与特定FTP服务器进行沟通。

FtpWebRequest 与 FtpWebResponse 类分别继承了 WebRequest 与 WebRequest。

FtpWebRequest负责将指令传送至FTP服务器;

FtpWebResponse则封装服务器所返 回的消息。

FtpWebRequest  封装FTP客户端的功能集成;

FtpWebResponse 封装FTP服务器的返回消息,从而取得FTP返回的消息码与文件数据,这些数据内容以数据流的形式返回。

FtpStatusCode列举类表示FTP操作返回的状态代码,它的列举值代表各种FTP操作的状态描述。例如:

AccountNeeded                 表示服务器上需要用户账户;

BadCommandSequence    表示命令的顺序不正确;

FileActionOK                      指定所要求的文件传输动作成功执行完成等。

一、联机

若要建立FTP联机,进而与FTP服务器沟通之前,需建立FtpWebRequest实体对象。

同样,FTP协议也需调用WebRequest的Create()方法建立FtpWebRequest 实体:

[vb] view plaincopy

Dim myFtpWebRequest As FtpWebRequest = CType(FtpWebRequest.Create(target),FtpWebRequest)

参数target为FTP配置的网络资源URI。同前面HttpWebRequest一样,FtpWebRequest.Create(target)返回类型是WebRequest,所以需要转类型为FtpWebRequest。

建立FtpWebRequest对象后,即可从FtpWebRequest.GetResponse()取得封装服务器响应消息的FtpWebResponse对象,完成应用程序所要进行的FTP操作。

[vb] view plaincopy

Using myResponse As FtpWebResponse =CType(myFtpWebRequest.GetResponse, FtpWebResponse)

二、FTP操作种类

与FTP服务器联机沟通之前,先确定应用程序要执行的操作,如上传下载文件、 目录增删列举等。

FTP服务器在接收到应用程序引用GetResponse()方法要求返回操作消息的时候,会根据应用程序所指定的方法进行相关操作,故要在此之前预先指定FTP 所要执行的方法。

简单地说:联机发起的同时,也发送操作指令。回应指令的同时也完成客户端的指令。

FTP操作由WebRequestMethods.Ftp类所定义,字段集如下:

1、文件操作

AppendFile               FTP APPE通信协议方法,用来将文件附加到FTP服务器上的现有文件

DeleteFile                 FTP DELE通信协议方法,用来删除FTP服务器上的文件

DownloadFile           FTP RETR通信协议方法,用来从FTP服务器下栽文件

UploadFile                将文件上传到FTP服务器的FTP STOR通信协议方法

UploadFileWithUniqucName  将文件名唯一的文件上传到FTP服务器的FTP STOU通信协议方法

GetFileSize               表示FTP SIZE通信协议方法,用来获取FTP服务器上文件的大小

2、目录操作

PrintWorkingDirectory   表示FTP PWD通倍协议方法,用来显示当前工作目录的名称

ListDirectory                  表示FTP NLIST通信协议方法,用来取得FTP服务器上文件的简短列表

ListDirectoryDetails       表示FTP LIST通信协议方法,用来取得FTP眼务器上文件的详细列表

MakeDirectory              表示FTP MKD通信协议方法,用来在FTP服务器上建立目录

RemoveDirectory          删除目录的FTP RMD通信协议方法

Rename                        重新命名目录的FTP RENAME通信协议方法

上面FTP操作方法通过FileWebRequestMethod属性的设置:

[vb] view plaincopy

myFtpWebRequest.Method = WebRequestMethods.Ftp.DownloadFile

四、FTP认证信息

FTP服务器一般会要求提供登录账号与密码,只有完成验证才能登录FTP服务器,进行FTP操作。

认证信息直接通过FtpWebRequest.Credentials属性进行设置.

[vb] view plaincopy

Public Overrides Property Credentials As ICredentials

需指定一个实际应用ICredentials接口的对象,用来封装账号与密码等相关信息。

例如NetworkCredential对象,通过FtpWebRequest.Credentials属性随着myFtpWebRequest对象传递到FTP服务器中:

[vb] view plaincopy

Dim myNetworkCredential = New NetworkCredential(username, uaerpwd)

myFtpWebRequest.Credentials = myNetworkCredential

五、完成FTP功能的操作

完成任意一种FTP操作,应完成以下步骤:

(1)WebRequest.Create()方法建立FtpWebRequest 实体。

(2)指定认证信息FtpWebRequest.Credentials。

(3)指定操作种类WebRequestMethods.Ftp。

(4)取得FtpWebRequest数据流,进行数据传输操作。

(5)FtpWebRequest.GetResponse()方法取得FTP服务器响应信息对象 FtpWebResponse。

(6)取得FtpWebRequest数据流,进一步读取服务器端响应的数据内容。

1-3步是必须的(连接、认证、操作),一些操作如上传与下载还要4-6步。

六、FTP目录操作

即对FTP服务器上目录进行新增、删除、修改,甚至目录列举操作。

1、新建、删除、更名目录

[vb] view plaincopy

Imports System.Net

Public Class Form1

Private Sub txtOpera_Click(sender As Object, e As EventArgs) Handles txtOpera.Click

DirOperation()

End Sub

Private Sub DirOperation()

Try

Dim frq As FtpWebRequest = CType(FtpWebRequest.Create(txtFTP.Text), FtpWebRequest)

Dim fcr As New NetworkCredential(txtUser.Text, txtPassword.Text)

Dim frp As FtpWebResponse

frq.Credentials = fcr '认证信息

Select Case True

Case rdoMake.Checked

frq.Method = WebRequestMethods.Ftp.MakeDirectory

Case rdoDele.Checked

frq.Method = WebRequestMethods.Ftp.RemoveDirectory

Case rdoReName.Checked

If txtNewFTP.Text <> "" Then

frq.Method = WebRequestMethods.Ftp.Rename

frq.RenameTo = txtNewFTP.Text

End If

Case Else

MsgBox("未选择!")

End Select

frp = CType(frq.GetResponse, FtpWebResponse) '发送、操作、并返回

frp.Close()

Catch ex As Exception

MsgBox(ex.Message)

End Try

End Sub

End Class

2、列举目录

向服务发送列举目录指令,服务器端会将所有指定目录下面的子目录及文件名写入数据流,然后返回到客户端,因此列举目录的时候必须进一步取得响应对象的数据流对象:

[vb] view plaincopy

Dim myStream As Stream = myResponse.GetResponseStream()

取得服务器FtpWebResponse.GetResponseStream()返回的数据流,对该流进行读写即可得目录列举信息。

要取得目录列举信息,需设置 Method属性为ListDirectory或是ListDirectoryDetails:

ListDirectory              只单纯地列举文件目录名称;

ListDirectoryDetails   进一步列举相关的文件目录特性。

[vb] view plaincopy

Imports System.Net

Imports System.IO

Imports System.Text

Public Class Form1

Private Sub btnFtpList_Click(sender As Object, e As EventArgs) Handles btnFtpList.Click

Try

Dim frq As FtpWebRequest = CType(FtpWebRequest.Create(txtFTP.Text), FtpWebRequest)

Dim cre As New NetworkCredential(txtUser.Text, txtPassword.Text)

Dim frp As FtpWebResponse

Dim st As Stream

Dim sr As StreamReader

frq.Credentials = cre

If rdoSimple.Checked = True Then

frq.Method = WebRequestMethods.Ftp.ListDirectory

Else

frq.Method = WebRequestMethods.Ftp.ListDirectoryDetails

End If

frp = CType(frq.GetResponse, FtpWebResponse)

st = frp.GetResponseStream

sr = New StreamReader(st, Encoding.UTF8) '对响应流读取

txtListDrectory.Text = sr.ReadToEnd

frp.Close()

Catch ex As Exception

MsgBox(ex.Message)

End Try

End Sub

End Class

七、FTP文件操作

(一)FTP下载

通过FtpWebResponse.GetResponseStream()用取得服务器(要下载的)数据流,再通过文件流FileStream用字节组写入文件,来完成FTP的下载过程。

[vb] view plaincopy

Imports System.Net

Imports System.IO

Public Class Form1

Private Sub btnDown_Click(sender As Object, e As EventArgs) Handles btnDown.Click

Dim frq As FtpWebRequest, frp As FtpWebResponse, fcr As NetworkCredential

Dim st As Stream, fs As FileStream

Dim byt(1024) As Byte, intCount As Integer

Try

frq = CType(WebRequest.Create(New Uri(txtFtp.Text)), FtpWebRequest)

fcr = New NetworkCredential(txtUser.Text, txtPassword.Text)

frq.Credentials = fcr

frq.Method = WebRequestMethods.Ftp.DownloadFile

frq.UseBinary = True

frp = CType(frq.GetResponse, FtpWebResponse)

st = frp.GetResponseStream

fs = New FileStream(txtSave.Text, FileMode.Create)

Do

intCount = st.Read(byt, 0, 1024)

fs.Write(byt, 0, intCount)

Loop While intCount > 0

fs.Close()

frp.Close()

Catch ex As Exception

MsgBox(ex.Message)

End Try

End Sub

End Class

(二)FTP上载

上传与下载相反,下载时通过FtpWebResponse.GetResponseStream()方法取得数据流,再对该流进行写入本地文件。

上传时,则是在请求流FtpWebRequest.GetRequestStream()加载数据(文件),由此完成上传任务。

请求流格式:

[vb] view plaincopy

Public Overrides Function GetRequestStream As Stream

此方法返回一个Stream数据流对象,写入此数据流的数据内容,进一步被送到要求链接的服务器,完成上传操作。

[vb] view plaincopy

Imports System.Net

Imports System.IO

Public Class Form1

Private Sub btnFtp_Click(sender As Object, e As EventArgs) Handles btnFtp.Click

Dim frq As FtpWebRequest, frp As FtpWebResponse

Dim st As Stream, fs As FileStream

Dim byt(1024) As Byte, intCount As Integer

frq = CType(WebRequest.Create(txtFile.Text), FtpWebRequest)

frq.Credentials = New NetworkCredential(txtUser.Text, txtPassword.Text)

frq.Method = WebRequestMethods.Ftp.UploadFileWithUniqueName

st = frq.GetRequestStream

fs = New FileStream(txtFile.Text, FileMode.Open, FileAccess.Read)

Do

intCount = fs.Read(byt, 0, 1024) '将文件流加载到请求流上

st.Write(byt, 0, intCount)

Loop While (intCount > 0)

frp = CType(frq.GetResponse, FtpWebResponse)

frp.Close()

MsgBox("完成!")

End Sub

End Class

vb.net FTP上传下载,目录操作的更多相关文章

  1. JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)

    package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...

  2. windows系统下ftp上传下载和一些常用命令

    先假设一个ftp地址 用户名 密码 FTP Server: home4u.at.china.com User: yepanghuang Password: abc123 打开windows的开始菜单, ...

  3. windows下ftp上传下载和一些常用命令

    先假设一个ftp地址 用户名 密码 FTP Server: home4u.at.china.com User: yepanghuang Password: abc123 打开windows的开始菜单, ...

  4. 高可用的Spring FTP上传下载工具类(已解决上传过程常见问题)

    前言 最近在项目中需要和ftp服务器进行交互,在网上找了一下关于ftp上传下载的工具类,大致有两种. 第一种是单例模式的类. 第二种是另外定义一个Service,直接通过Service来实现ftp的上 ...

  5. Java.ftp上传下载

    1:jar的maven的引用: 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...

  6. python之实现ftp上传下载代码(含错误处理)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之实现ftp上传下载代码(含错误处理) #http://www.cnblogs.com/kait ...

  7. java客户端调用ftp上传下载文件

    1:java客户端上传,下载文件. package com.li.utils; import java.io.File; import java.io.FileInputStream; import ...

  8. ftp上传下载工具类

    package com.taotao.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNo ...

  9. FTP上传下载工具(FlashFXP) v5.5.0 中文版

    软件名称: FTP上传下载工具(FlashFXP) 软件语言: 简体中文 授权方式: 免费试用 运行环境: Win 32位/64位 软件大小: 7.4MB 图片预览: 软件简介: FlashFXP 是 ...

随机推荐

  1. MAC系统 - 系统目录结构

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/smstong/article/detai ...

  2. 迭代器对象numpy.nditer在数组上进行迭代——修改数组的值

    nditer对象有另一个可选参数op_flags,默认情况下,nditer将视待迭代遍历的数组为只读对象(read-only),为了在遍历数组的同时,实现对数组元素值得修改,必须指定op_flags= ...

  3. excel表格 函数功能

    1.去重复 选中一个区域——>数据——>删除重复项 2.条件求和 按照条件筛选:筛选出一样的类目,将对应的值求和. =sumif(A$1:A$10,B2,C$1:C$10) A$1:A$1 ...

  4. Jquery练习1

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. 第七届蓝桥杯javaB组真题解析-剪邮票(第七题)

    题目 /* 剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色 ...

  6. java集合体系结构总结

    好,首先我们根据这张集合体系图来慢慢分析.大到顶层接口,小到具体实现类. 首先,我想说为什么要用集合?简单的说:数组长度固定,且是同种数据类型.不能满足需求.所以我们引入集合(容器)来存储任意数据类型 ...

  7. 改写画质、突破性能, Unity 全面升级!

    技术变革,时代更迭.从<神庙逃亡>.<暗影之枪>等主流手游到独立联网的大型游戏,从绚丽多彩的影视动画到具备极致体验的运输建筑制造行业,从传统的2D 到立体3D 乃至沉浸式的VR ...

  8. vue element 时间选择器设置禁用日期

    在 el-date-picker 组件中有一个 picker-options 属性 disabledDate 可以设置日期的可选范围 <el-date-picker v-model=" ...

  9. [蓝桥杯2016初赛]卡片换位 BFS

    题目描述 你玩过华容道的游戏吗?这是个类似的,但更简单的游戏.看下面 3 x 2 的格子 +---+---+---+ | A | * | * | +---+---+---+ | B | | * | + ...

  10. 【剑指Offer面试编程题】题目1360:乐透之猜数游戏--九度OJ

    题目描述: 六一儿童节到了,YZ买了很多丰厚的礼品,准备奖励给JOBDU里辛劳的员工.为了增添一点趣味性,他还准备了一些不同类型的骰子,打算以掷骰子猜数字的方式发放奖品.例如,有的骰子有6个点数(点数 ...