- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章ruby ftp封装实例详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
ruby ftp封装实例详解 。
最近自己用ruby 封装了一个Net::FTP的工具类. 。
1
2
3
4
5
6
7
8
9
|
class
FtpTool
def
initialize()
@current_ftp
= create_ftp
end
|
# 获取指定格式的文件名称列表 。
# 例如: source = "test/*.txt" 。
# 返回: [source/file_name.txt] 。
1
2
3
4
5
6
7
8
9
10
11
|
def
fetch_remote_filenames(source)
return
[]
if
source.blank?
log_info(
"source is "
+ source)
filenames =
@current_ftp
.nlst(source)
filenames
end
|
# 获取服务器上确切名称的文件 。
# 例如: get("test/test.txt") 。
# 文件将被保存到本地 tmp/test/test.txt 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
def
get(origin_file)
local_file = local_file(origin_file)
local_file.gsub(
"\\"
,
"\\\\"
)
#此处注意是window下执行, 在linux下需要注意改成/
log_info(
"Ftp Get: #{origin_file} -> #{local_file}"
)
begin
@current_ftp
.getbinaryfile(origin_file, local_file+
".tmp"
)
rescue
delete_local_file(local_file+
".tmp"
)
end
rename_local_file(local_file+
".tmp"
, local_file)
if
File
.exist?(local_file+
".tmp"
)
end
|
# 上传文件到指定的路径 。
# 例如: put("tmp\\test\\test.txt", "/test/") 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
def
put(origin_file, remote_path)
return
nil
if
not
File
.exist?(origin_file)
_file_name =
File
.basename(origin_file)
_root =
@current_ftp
.getdir
@current_ftp
.chdir(remote_path)
log_info(
"Ftp put: #{origin_file} -> #{remote_path}"
)
begin
@current_ftp
.putbinaryfile(origin_file, remote_path + _file_name +
".tmp"
)
rescue
delete(remote_path + _file_name +
".tmp"
)
end
@current_ftp
.chdir(_root)
rename(remote_path + _file_name +
".tmp"
, remote_path + _file_name)
end
|
# 关闭ftp 。
1
2
3
4
5
6
7
|
def
close
@current_ftp
.close
if
@current_ftp
end
|
# 服务器copy文件 。
1
2
3
4
5
6
7
|
def
copy(origin_file, file_path)
local_file = local_file(origin_file)
_file_name =
File
.basename(origin_file)
begin
|
#1. 到本地 。
1
2
3
4
5
|
log_info(
"FTP get file to:"
+ local_file+
".tmp"
)
@current_ftp
.getbinaryfile(origin_file, local_file+
".tmp"
)
return
nil
if
not
File
.exist?(local_file+
".tmp"
)
|
#2. 到服务器 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
log_info(
"FTP put file to :"
+ file_path + _file_name +
".tmp"
)
@current_ftp
.putbinaryfile(local_file+
".tmp"
, file_path + _file_name +
".tmp"
)
#3. 改名字
rename(file_path + _file_name +
".tmp"
, file_path + _file_name)
#5. 删除本地
delete_local_file(local_file +
".tmp"
)
rescue
=> e
log_info(e)
#4. 删除服务器上临时文件
delete(file_path + origin_file +
".tmp"
)
#5. 删除本地
delete_local_file(local_file +
".tmp"
)
end
end
|
# 服务器上移动文件 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
def
move(origin_file, file_path)
_file_name =
File
.basename(origin_file)
begin
copy(origin_file, file_path)
# 删除服务器上源文件
delete(origin_file)
rescue
=> e
log_info(e)
# 删除临时文件,如果存在
delete(file_path + _file_name +
".tmp"
)
# 删除服务器上目标文件, 如果存在
delete(file_path + _file_name)
end
end
|
# 重命名服务器文件 。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
def
rename(origin_file, file)
if
not
@current_ftp
.list(origin_file).blank?
log_info(
"FTP rename #{origin_file} to #{file}"
)
@current_ftp
.rename(origin_file, file)
end
end
|
# 删除服务器上的文件 。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
def
delete(origin_file)
if
not
@current_ftp
.list(origin_file).blank?
log_info(
"FTP delete #{origin_file}"
)
@current_ftp
.delete(origin_file)
end
end
|
# ftp 是否关闭 。
1
2
3
4
5
6
7
8
9
|
def
closed?
@current_ftp
.closed?
end
class
<<
self
|
# 文件编码转换 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
def
convert(src_file, dest_file, from_encode, to_encode )
log_info(
"Convert #{src_file} to #{dest_file}"
)
cd = Iconv.
new
(to_encode, from_encode)
File
.open(dest_file,
"w"
)
do
|out|
File
.open(src_file)
do
|in_stream|
in_stream.each_line
do
|line|
begin
new_line = cd.iconv(line)
out.write(new_line)
rescue
=> e
log_info
"convert line error : #{line}"
next
end
end
end
end
cd.close
dest_file
end
end
protected
|
#生成ftp 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
def
create_ftp
require
"net/ftp"
ftp = Net::
FTP
.
new
ftp.connect(ftp_host, ftp_port)
ftp.login(ftp_user, ftp_pwd)
ftp.passive = ftp_mode
ftp
end
|
#本地路径 。
1
2
3
4
5
6
7
8
9
10
11
|
def
local_file(file)
local =
File
.join(
"tmp/"
, file)
FileUtils.makedirs(
File
.dirname(local))
local
end
|
# 删除本地文件 。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
def
delete_local_file(file)
if
File
.exist?(file)
log_info(
"delete local file : "
+ file)
File
.delete(file)
end
end
|
# 重命名本地文件 。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
def
rename_local_file(origin_file, file)
if
File
.exist?(origin_file)
log_info(
"rename local file : "
+ origin_file +
" to "
+ file)
File
.rename(origin_file, file)
end
end
|
#初始化参数 。
1
2
3
4
5
6
7
8
9
10
11
|
def
ftp_host;
"x.x.x.x"
end
def
ftp_port;
"21"
end
def
ftp_user;
"x"
end
def
ftp_pwd ;
"x"
end
def
ftp_mode;
true
end
end
|
原文链接:http://blog.csdn.net/sean_cd/article/details/7307307 。
最后此篇关于ruby ftp封装实例详解的文章就讲到这里了,如果你想了解更多关于ruby ftp封装实例详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
根据 FTP 协议(protocol)(rfc 959),当 ftp 客户端连接到 ftp 服务器时,应该在 ftp 客户端和 ftp 服务器之间建立控制连接。而当ftp客户端发送{LIST, R
是否可以使用 FTP 命令重命名 FTP 服务器上的文件夹? 我知道有一个用于文件重命名的 Rename 命令,但是我可以将它用于文件夹名称吗? 最佳答案 AFAIK,相同的命令( RNFR/RNTO
我有一个 ftp://host/path URL,我想下载文件并在 Erlang 中连接丢失时继续下载。 使用 ftp 开始下载非常简单模块,但如何恢复它? 最佳答案 是的..就像 Peer 提到的.
我一直在阅读 FTP 规范并使用 Wireshark 来捕获我的 FTP 客户端发送/接收的数据包,并有一些关于它们的问题。 首先是来自我的 FTP 服务器的“连接问候语”(如 FTP RFC 所称)
我有一个 ColdFusion 应用程序,用于在开发和生产服务器之间传输文件。实际发送文件的代码如下: ftp = new Ftp(); ftp.setUsername(username); ftp.
我正在尝试连接到允许匿名访问的 FTP 服务器,但我不知道如何指定执行此操作所需的适当用户名/密码。 我尝试过使用匿名/匿名作为用户/通行证,但没有成功,以及空字符串和两者的各种组合等。 这一定是我所
ftp rstatus $remotefile 在Solaris 上出现“?无效命令”错误。我发现,与 HP-UX 不同,Solaris 10 上没有像 rstatus 这样的 ftp 命令。基本上在
我是 Spring 的新手,我目前正在研究 spring 与 ftp 支持的集成。 我从本地目录传输到服务器 (filZilla)。 我从服务器下载了文件,没问题。 但我想知道如何将文件从 FTP 服
我想通过加密连接 FTP,需要使用 PHP 代码通过 TLS 隐式 FTP。 我已经尝试使用普通 FTP 进行加密,它可以工作,但加密需要通过 TLS 的隐式 FTP 不起作用。 最佳答案 尝试使用下
我已经成功使用 LuaSocket 的 TCP 工具,但我在使用它的 FTP 模块时遇到了问题。尝试检索(小)文件时,我总是超时。我可以在被动模式下使用 Firefox 或 ftp 下载文件(在 Ub
我尝试使用 putty 使用 FTP 详细信息主机名、用户名和密码登录到服务器。但是当我输入密码时它显示拒绝访问。 对于我的另一个网站,我输入了我的主机名并单击在腻子中打开,它显示“网络错误:连接超时
只是我,还是 FTP 看起来有点过时?它看起来很慢而且效率低下,而且它已经有 30 多年的历史了,并不是所有的旧东西都是坏的 :) 有哪些协议(protocol)可能成为 FTP 的继任者? 我用过一
我有一个有点相关但不同的问题 here . 我有一个批处理脚本( *.bat 文件),例如: @ftp -i -s:"%~f0"&GOTO:EOF open ftp.myhost.com myuser
我正在使用 IBM Mainframe TSO 从数据集中查看文件。最近有人告诉我每天开始将最新一代的数据集通过 FTP 传输到我桌面上的文件夹中。问题是我的 FTP 脚本只允许我用我输入的确切名称
我正在尝试使用 atom 包“Remote-FTP”和私钥连接到我的服务器。 我在我的服务器上设置了 SSH key ,并且可以使用腻子成功连接。 私钥保存在我的项目文件夹中,我有一个现有的 .ftp
我的 ftp 文件夹中有一组文件。我只能访问 ftp 模式。我想将那些扩展名为 .txt 的文件重命名为 .done 例如: 1.txt, 2.txt, 3.txt 到 1.done, 2.done,
lcd 更改本地目录。 ls 列出远程目录上的文件。 我想要的是lls,列出本地目录上的文件。 这可能吗? 我知道我总是可以打开另一个终端来执行此操作,但我很懒! 最佳答案 是的: !dir ! 告诉
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 社区去年审查
我的 FTP 测试服务器有问题。我已经安装并配置了 FileZilla 服务器,它正在监听端口 21 上的控制连接,然后它可以在 50100 和 51100 之间的端口上提供被动模式数据连接。 我正在
我正在运行 Filezilla Server 0.9.45 beta 来远程管理我的服务器。设置完成后,我测试使用 IP 127.0.0.1 连接到它,并且工作成功。但是,为了远程连接到服务器,我将端
我是一名优秀的程序员,十分优秀!