使用Ruby语言获取FTP服务器上的文件
发表时间: 2019-08-26 09:54
一、FTP安装
$ sudo apt-get update $ sudo apt-get install vsftpd
# 禁止匿名用户登录 anonymous_enable=NO # 允许系统用户登录 local_enable=YES # 启用可以修改文件的 FTP 命令 write_enable=YES # 本地用户创建文件的 umask 值 local_umask=022 # 允许为目录配置显示信息,显示每个目录下面的message_file文件的内容 dirmessage_enable=YES # 开启日记功能 xferlog_enable=YES # 使用标准的20端口来连接ftp connect_from_port_20=YES # 使用标准日志格式 xferlog_std_format=YES # 如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录 chroot_list_enable=YES # 指定限制的用户文件 chroot_list_file=/etc/vsftpd/chroot_list # ftp服务器将处于独立启动模式 listen=YES # 设置一个本地用户登录后进入到的目录 local_root=/home/ftp # 设置PAM认证服务的配置文件名称,该文件保存在“/etc/pam.d/”目录下 pam_service_name=vsftpd # ftp将检查userlist_file设置文件中指定的用户是否可以访问vsftpd服务器 userlist_enable=YES # 只允许user_list文件中记录的ftp用户能登录vsftp服务,其他的ftp用户都不可以登录。 userlist_deny=NO # 定义限制/允许用户登录的文件 userlist_file=/etc/vsftpd/allowed_users # ftp服务器将使用tcp_wrappers作为主机访问控制模式 tcp_wrappers=YES # 连接ftp服务费使用的端口 listen_port=21
#创建目录 mkdir /home/ftp #修改目录权限 chmod -R 777 /home/ftp #创建用户,并禁止登陆系统,将fyp目录给予这个用户 useradd -d /home/ftp -s /sbin/nologin ftpuser #为用户创建密码 passwd ftpuser #在etc下创建allowed_users touch allowed_users #然后把ftpuser写入到allowed_users文件中 vim /etc/allowed_users
#启动命令 service vsftpd start #查看状态 service vsftpd status
在浏览器地址栏输入 ftp://ip,然后在弹出的输入框中输入刚才创建的账号密码即可访问,如图
二、Ruby读取FTP
ruby使用自己的net/ftp即可读取ftp内容
require 'net/ftp' class FtpHelp HOST = "ip" PORT = "21" USER = "ftpuser" PSW = "psw" def self.get_file_by_path(es, path) ftp = Net::FTP.new #连接ftp ftp.connect(HOST, PORT) #登陆 ftp.login(USER, PSW) ftp.passive = true #创建本地路径 local_path = local_path(path) #临时文件路径 tmp_path = local_path+".tmp" #开始读取文件 begin ftp.getbinaryfile(path, tmp_path) rescue File.delete(tmp_path) if File.exist?(tmp_path) end #把临时文件改为正式文件路径 File.rename(tmp_path, local_path) if File.exist?(tmp_path) #关闭ftp ftp.close if File.exist?(local_path) return File.open(local_path) else return nil end end #创建本地路径 def self.local_path(file) local = File.join(PATH+"/public/ftpfile", file) FileUtils.makedirs(File.dirname(local)) local end end