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