Skip to content

Instantly share code, notes, and snippets.

@brianburridge
Forked from 3dd13/ruby_ftp_example.rb
Last active August 30, 2019 14:46
Show Gist options
  • Save brianburridge/bd1f8ac0ebff7f31e848d0ca90fdfdd4 to your computer and use it in GitHub Desktop.
Save brianburridge/bd1f8ac0ebff7f31e848d0ca90fdfdd4 to your computer and use it in GitHub Desktop.
Sample code of using Ruby Net::FTP library. Login to FTP server, list out files, check directory existence, upload files
require 'net/ftp'
CONTENT_SERVER_DOMAIN_NAME = "one-of-the-ftp-server.thought-sauce.com.hk"
CONTENT_SERVER_FTP_LOGIN = "saucy-ftp-server-login"
CONTENT_SERVER_FTP_PASSWORD = "saucy-ftp-server-password"
# LOGIN and LIST available files at default home directory
Net::FTP.open(ENV['CONTENT_SERVER_DOMAIN_NAME'], ENV['CONTENT_SERVER_FTP_LOGIN'], ENV['CONTENT_SERVER_FTP_PASSWORD']) do |ftp|
ftp.login
files = ftp.list
puts "list out files in root directory:"
puts files
end
# check if the directory existence
# create the directory if it does not exist yet
Net::FTP.open(CONTENT_SERVER_DOMAIN_NAME, CONTENT_SERVER_FTP_LOGIN, CONTENT_SERVER_FTP_PASSWORD) do |ftp|
ftp.mkdir("/root_level") if !ftp.list("/").any?{|dir| dir.match(/\sroot_level$/)}
# create nested directory
# it does not create directory tree
# therefore, create "/root_level" before creating "/root_level/nested"
ipad_folder = ftp.list("/root_level")
ftp.mkdir("/root_level/nested") if !ipad_folder.any?{|dir| dir.match(/\snested$/)}
end
# upload files
TXT_FILE_OBJECT = File.new("/home/though-sauce/to_be_uploaded/0001.txt")
Net::FTP.open(CONTENT_SERVER_DOMAIN_NAME, CONTENT_SERVER_FTP_LOGIN, CONTENT_SERVER_FTP_PASSWORD) do |ftp|
ftp.putbinaryfile(TXT_FILE_OBJECT)
end
# upload files and rename it
Net::FTP.open(CONTENT_SERVER_DOMAIN_NAME, CONTENT_SERVER_FTP_LOGIN, CONTENT_SERVER_FTP_PASSWORD) do |ftp|
ftp.putbinaryfile(TXT_FILE_OBJECT, "0001.txt.in_process")
end
# upload files to nested directory
Net::FTP.open(CONTENT_SERVER_DOMAIN_NAME, CONTENT_SERVER_FTP_LOGIN, CONTENT_SERVER_FTP_PASSWORD) do |ftp|
ftp.putbinaryfile(TXT_FILE_OBJECT, "/root_level/nested/#{File.basename(TXT_FILE_OBJECT)}")
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment