SPL:访问 FTP

FTP是常用的文件传输服务。JAVA虽然也提供了从FTP server读写文件的接口,但用起来不够便捷,因此,SPL进一步地提供了方便函数。

创建/关闭FTP连接

使用方式类似关系数据库的JDBC连接,SPL也用成对的创建/关闭方式连接FTP

ftp_open(server:port,user,pwd)server是服务器地址,port是其服务端口,user,pwd是用户名、密码,如果没有可以省略。

ftp_close(ftpConn)ftpConn是要关闭的FTP连接。

示例:A1创建连接,中间做一些上传、下载操作后,A3关闭A1创建的连接


A

1

=ftp_open("127.0.0.1":22)

2

……

3

=ftp_close(A1)

ftp有主动/被动两种模式,ftp_open()默认为主动模式,如需要被动模式,用选项@d指定:ftp_open@d(...)

还有需要sftp的情况,这时要加@s选项:ftp_open@s(...)

查看服务器文件、管理目录

ftp_dir(ftpConn,files)ftpConnFTP连接,files是服务器上文件或目录的通配符(或具体名称),根据需要可以有任意多个。

示例:

=ftp_dir(A1,"/")

获得根目录下所有文件、目录

..

 

=ftp_dir(A1,"**.txt","**.csv")

获得所有目录下的txtcsv文件,可以用通配符**(?代表文件名的单个字符,*代表文件名的任意字符,**代表任意目录或文件)。

..

 

如果只想获得目录,用@d选项控制:

=ftp_dir@d(A1,"/")

..

 

想创建新的目录,用@m选项实现:

=ftp_dir@m(A1,"/folder3")

结果显示创建成功了:

..

 

@r选项删除空目录:

=ftp_dir@r(A1,"/folder3")

第一次执行,会提示操作成功:

..

再重复执行一次删除,会提示失败,因为删除的目录不存在或目录不为空:

..

 

下载单个文件

ftp_get(ftpConn, remoteFile, localFile),把服务器文件“remoteFile”下载为本地文件“localFile”

示例:

=ftp_get(A1,"/file8.csv","d:/file8.csv")

执行后提示下载成功:

..

如果本地文件已经存在,就会提示下载失败。

..

这时如果想强制下载,覆盖掉本地文件,加上@f选项就可以了:

=ftp_get@f(A1,"/file8.csv","d:/file8.csv")

 

上传单个文件

ftp_put(ftpConn, remoteFile, localFile),把本地文件“localFile”上传到服务器上,目标为“remoteFile”

示例:

=ftp_put(A1,"/file8_new.csv","d:/file8.csv")

执行后提示上传成功:

..

同样,ftp_put也有@f选项,服务器上文件已经存在时,强制上传覆盖。

 

批量下载文件

ftp_mget(ftpConn, serverFolder, localFolder, serverFiles),从服务器上serverFolder下载到本地的localFolder,下载的文件是通配符“serverFiles”,也支持任意多个

示例:

把服务器的/folder1下的所有xlsxlsx文件下载到本地d:/folder1下:

=ftp_mget(A1,"/folder1","d:/folder1","*.xls","*.xlsx")

 

把服务器的/folder1下的所有目录、文件下载到本地d:/folder1下:

=ftp_mget(A1,"/folder1","d:/folder1","**")

 

ftp_get()类似,ftp_mget@f选项强制覆盖本地文件,除此之外,还多了@t选项,表示遇到存在文件时要跳过,只下载本地不存在的文件。

 

批量上传文件

ftp_mput(ftpConn, serverFolder, localFolder, localFiles),从本地localFolder“localFiles”上传到服务器“serverFolder”里,同样支持多个通配符

示例:

把本地d:/folder1下的所有xlsxlsx文件上传到服务器的/folder1下:

=ftp_mput(A1,"/folder1","d:/folder1","*.xls","*.xlsx")

 

把本地d:/folder1下的所有目录、文件上传到服务器的/folder1下:

=ftp_mput(A1,"/folder1","d:/folder1","**")

 

ftp_put()类似,ftp_mput@f选项强制覆盖服务器文件,也多了@t选项,表示遇到存在文件时要跳过,只上传服务器上不存在的文件。

 

修改工作目录

之前示例中的服务器目录都是绝对路径,以“/”开头,如果频繁在某个目录下操作时,可以用ftp_cd()修改当前工作目录,这之后再涉及服务器目录是,不以“/”开头的,就都是相对于当前工作目录的。

ftp_cd(ftpConn, remotePath),设置remotePath为工作目录。

 

file7.json/folder2下,A2先把它设置为工作目录,A3下载file7.json时,就不用指定完整的绝对路径了:


A

1

=ftp_open("127.0.0.1":22)

2

=ftp_cd(A1, "/folder2")

3

=ftp_get(A1, "file7.json", "d:/file7.json")

4

……

5

=ftp_close(A1)

 

ftp_dir()ftp_put()ftp_mget()ftp_mput()等函数中涉及服务器目录时,使用的相对路径也都是相对当前工作目录