ftp
连接到 FTP 服务器以访问其文件
说明
通过调用 ftp
函数(用于创建 FTP 连接对象)可连接到 FTP 服务器。然后使用 FTP 连接对象上传和下载文件。您还可以创建、删除和导航到服务器上的不同文件夹。要关闭连接,请使用 close
函数。
由于 FTP 不是安全协议,因此它不会加密您的用户名、密码以及您从 FTP 服务器下载或上传到 FTP 服务器的任何数据。如果您需要安全 FTP 连接,请使用 sftp
。
创建对象
语法
描述
ftpobj = ftp(
使用一个或多个名称-值参数指定其他输入参数。例如,指定 host
,username
,password
,Name,Value
)"System"
,"Windows"
以连接到运行 Windows® 操作系统的 FTP 服务器,或指定 "LocalDataConnectionMethod"
的值将连接模式从被动模式更改为主动模式。
输入参数
host
— FTP 服务器的主机名
字符串标量 | 字符向量
FTP 服务器的主机名,指定为字符串标量或字符向量。
FTP 服务器的默认端口号为 21。要为连接指定备用端口号,请在 host
后面添加冒号 (:
) 和端口号。
通常,服务器的主机名以 ftp
开头,如 "ftp.example.com"
中所示。然而,这种做法只是一种约定,而不是技术要求。例如,如果服务器 www.example.com
配置为提供 FTP 服务,则 ftpobj = ftp("www.example.com:20")
会打开与端口号 20 的匿名连接。
示例: ftpobj = ftp("ftp.example.com")
username
— 已授权帐户的名称
字符串标量 | 字符向量
FTP 服务器上已授权帐户的名称,指定为字符串标量或字符向量。FTP 对象以纯文本形式发送 username
。
password
— 已授权帐户的密码
字符串标量 | 字符向量
已授权帐户的密码,指定为字符串标量或字符向量。FTP 对象以纯文本形式发送 password
。
示例: ftpobj = ftp("ftp.example.com","myusername","mypassword")
将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参数名称,Value
是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: "System","Windows"
System
— 在 FTP 服务器上运行的操作系统的类型
"unix"
(默认) | "Windows"
FTP 服务器上运行的操作系统的类型,指定为名称-值参数,该对组由 "System"
和 "unix"
或 "Windows"
组成。
FTP 连接对象自动检测服务器的操作系统。
如果没有为 FTP 服务器上运行的操作系统配置 FTP 连接对象,则 FTP dir
函数返回的信息可能会少一些。在这种情况下,dir
可能会返回一个结构体数组,其中的某些字段为空。如果出现这种情况,请再次调用 ftp
,并为 "System"
名称-值参数指定正确的值以指定正确的操作系统。
LocalDataConnectionMethod
— 连接模式
"passive"
(默认) | "active"
连接模式,指定为名称-值参数,包含 "LocalDataConnectionMethod"
和 "passive"
或 "active"
。
可以通过两种模式来建立 FTP 连接。大多数现代 FTP 实现都使用 passive
模式,但要连接到一些旧式服务器,您可能需要指定 active
模式。
"passive"
- 您的计算机会建立这两个通道。建立命令通道后,您的计算机会请求 FTP 服务器开始侦听某端口,以便您的计算机可以连接到该端口。"active"
- 您的计算机为命令建立一个通道,但 FTP 服务器为数据建立一个通道。例如,如果您的计算机受防火墙保护并且不允许来自外部源的未经授权的会话请求,则主动模式可能会出现问题。
ServerLocale
— 从远程服务器读取日期的区域设置
"en_US"
(默认) | string scalar
| character vector
从远程服务器读取日期的区域设置,指定为名称-值参数,其中包含 "ServerLocale"
和字符串标量或字符向量。
ServerLocale
值可以为:
形式的字符向量或字符串标量,其中xx
_YY
xx
是用于指定语言的小写 ISO 639-1 双字母代码,YY
是用于指定国家/地区的大写 ISO 3166-1 alpha-2 代码。
下表列出了区域设置的某些常用值。
区域设置 | 语言 | 国家/地区 |
---|---|---|
"de_DE" | 德语 | 德国 |
"en_GB" | 英语 | 英国 |
"en_US" | 英语 | 美国 |
"es_ES" | 西班牙语 | 西班牙 |
"fr_FR" | 法语 | 法国 |
"it_IT" | 意大利语 | 意大利 |
"ja_JP" | 日语 | 日本 |
"ko_KR" | 韩语 | 韩国 |
"nl_NL" | 荷兰 | 荷兰 |
"zh_CN" | 简体中文 | 中国 |
DirParserFcn
— 如何解析 FTP 服务器的 LIST 命令输出
function_handle
如何解析 FTP 服务器的 LIST 命令输出,指定为由 "DirParserFcn"
和函数句柄组成的名称-值参数。默认值为 @matlab.io.ftp.parseDirListingForUnix
或 @matlab.io.ftp.parseDirListingForWindows
,具体取决于服务器的操作系统。
一个自定义函数句柄必须有两个输入:
目录条目列表,指定为字符串向量。
服务器区域设置,指定为字符串标量。
自定义函数句柄的输出必须是大小为 m×1 的结构体数组,其中 m 是文件夹中的项数。该结构体的字段必须与 dir
函数返回的结构体的字段匹配:name
、isdir
、bytes
、date
和 datenum
。有关这些字段的详细信息,请参阅 dir
函数页。
如果默认值导致引用无法解析 dir
输出的错误,请指定此名称-值参数。必须正确指定此参数才能使用引用 dir
的对象函数。
函数签名
自定义写入函数必须接受两个输入参数,即目录条目列表 entries
和服务器区域设置 serverLocale
:
function listing = myFormatFcn(entries,serverLocale)
示例函数
将条目联接为一个元胞数组,该元胞数组将作为 textscan 的输入:
function listing = myFormatFcn(entries,serverLocale) entries = join(entries,newline); out = textscan(entries,"%s%d%3c%d%s","MultipleDelimsAsOne",true); structSize = numel(out{1});
listing = struct("name",cell(structSize,1),"isdir",zeros(1,1), ... "bytes",zeros(1,1),"date",'',"datenum",zeros(1,1));
monthName = string(out{3}); day = string(out{4}); time = string(out{5}); names = out{1}; bytes = out{2};
for ii = 1 : structSize listing(ii).name = names{ii}; listing(ii).isdir = false; listing(ii).bytes = bytes(ii); makeDate = day(ii) + "-" + monthName(ii) + " " + ... time(ii); thisDate = datetime(makeDate, "InputFormat", "dd-MMM HH:mm", ... "Locale", serverLocale); listing(ii).date = datestr(thisDate); listing(ii).datenum = datenum(thisDate); end end
Mode
— FTP
服务器的传输模式
"binary"
(默认) | "ascii"
FTP 服务器的传输模式,指定为由 "Mode"
和 "binary"
或 "ascii"
组成的名称-值参数。使用 ASCII 模式处理文本文件,例如 HTML 页面和富文本格式 (RTF) 文件。对非文本文件使用二进制模式,如可执行文件或 zip 存档。
创建 FTP 对象后,使用 ascii 和二元函数更改传输模式。您可能需要更改模式来传输不同类型的文件。传输模式设置会保留到您的 MATLAB 会话结束,或直到您更改它们。
对象函数
示例
下载文件并列出文件夹的内容
要打开到 FTP 服务器的连接,请创建 FTP 对象。使用 FTP 对象下载文件并列出服务器上子文件夹的内容。在 FTP 会话结束后,关闭连接。
首先,连接到美国国家环境信息中心 (NCEI) 的 FTP 服务器。
ftpobj = ftp("ftp.ngdc.noaa.gov")
FTP with properties: Host: "ftp.ngdc.noaa.gov" Username: "anonymous" Port: 21 ServerLocale: "en_US" DirParserFcn: @matlab.io.ftp.parseDirListingForUnix Mode: "binary" LocalDataConnectionMethod: "passive" RemoteWorkingDirectory: "/"
列出 FTP 服务器上顶层文件夹的内容。
dir(ftpobj)
DMSP Solid_Earth google12c4c939d7b90761.html pub INDEX.txt coastwatch index.html wdc README.txt dmsp4alan international STP ftp.html ionosonde Snow_Ice geomag mgg
从 FTP 服务器下载 README.txt
文件。mget
函数会下载一个副本到您当前的 MATLAB® 文件夹中。
mget(ftpobj,"README.txt");
使用 readlines
函数读取 README.txt
副本的内容。
readme = readlines("README.txt");
readme(1:4)
ans = 4×1 string
" Welcome to the "
" NOAA/National Centers for Environmental Information (NCEI), "
" formerly the National Geophysical Data Center (NGDC)"
" FTP area"
使用 dir
函数列出子文件夹的内容。
dir(ftpobj,"STP")
ANOMALIES NOAA Solid_Earth publications DMSP SEIS aavso_22nov16 satellite_data ECLIPSE SGD aeronomy space-weather GEOMAGNETIC_DATA SOLAR_DATA cdroms space_environment_modeling GOIN SPIDR goesr swpc_products GPS_GNSS STEP ionosonde tivoli IONOSPHERE SWA log.txt
使用 cd
函数切换到子文件夹。cd
的输出是 FTP 服务器上当前文件夹的路径,而不是当前 MATLAB 文件夹的路径。
cd(ftpobj,"STP/space-weather")
ans = '/STP/space-weather'
列出 FTP 服务器上当前文件夹的内容。
dir(ftpobj)
aurora-airglow documentation interplanetary-data online-publications solar-data denig-files geomagnetic-data ionospheric-data satellite-data spacecraft-environments
关闭与 FTP 服务器的连接。您也可以通过删除 FTP 对象或让连接超时来关闭连接。
close(ftpobj)
FTP 服务由美国国家环境信息中心 (NCEI) 提供。有关 NCEI 服务条款,请参阅 NCEI 隐私政策、免责声明和版权。
为服务器区域设置和解析 LIST
命令输出指定值
连接到美国国家环境信息中心 (NCEI) 的 FTP 服务器。将服务器区域设置指定为英国。使用名称-值参数 "DirParserFcn"
指定要相对于 Windows 解析的 FTP 服务器的 LIST
命令输出。
ftpobj = ftp("ftp.ngdc.noaa.gov","ServerLocale","en_GB","DirParserFcn",@matlab.io.ftp.parseDirListingForWindows)
FTP with properties: Host: "ftp.ngdc.noaa.gov" Username: "anonymous" Port: 21 ServerLocale: "en_GB" DirParserFcn: @matlab.io.ftp.parseDirListingForWindows Mode: "binary" LocalDataConnectionMethod: "passive" RemoteWorkingDirectory: "/"
FTP 服务由美国国家环境信息中心 (NCEI) 提供。有关 NCEI 服务条款,请参阅 NCEI 隐私政策、免责声明和版权。
提示
FTP 对象不支持代理服务器设置。
将
~
符号传递给cd
函数以导航到登录文件夹。
版本历史记录
在 R2006a 之前推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)