使用Ruby

时间:2019-02-04 20:07:20

标签: ruby

由于某种原因,在Ruby中进行SFTP上传(将文件从本地目录复制到SFTP服务器)似乎不起作用。我目前正在使用Ruby 2.5.3。我真的很感谢任何想法:

我的下面的代码:

require 'net/ssh'
require 'net/sftp'

server = 'sftp.secure.net'
username = '123456'
password = "Mypassword*"
uid = '123456'

files = Dir.entries(outdir)
Net::SFTP.start(server, username, :password=>password) do |sftp|
  for filename in files
     #puts files
      puts "Browsing files..." 
      puts "File: #{filename}" 
     #puts new_filename

####### replacing , for | ########

     if /#{uid}_test_[0-9]{8}_[0-9]{8}.txt$/ =~ filename
     file = "#{outdir}\\#{filename}"
     puts "SFTPing #{file}"
     sftp.upload(file) 
     puts "SFTP Complete for file #{file}"
     puts "Cleanup"
     puts "Deleting #{file}."
     File.delete(file)
     puts "Files were deleted." 
     end
  end
puts "Closing SFTP connection..." 
sftp.close
puts "SFTP connection closed."
end

2 个答案:

答案 0 :(得分:0)

谢谢肯尼科克!那个上传!绝对有帮助。同样,应该删除sftp.close()。 SFTP连接自动关闭。我发现需要FTP,而SFTP不需要。

谢谢!

最终版本:

files = Dir.entries(outdir)
Net::SFTP.start(hostname, username, :password=>password) do |sftp|
for filename in files
     #puts files
      puts "Browsing files..." 
      puts "File: #{filename}" 
     #puts new_filename

####### replacing , for | ########

     if /#{uid}_test_[0-9]{8}_[0-9]{8}.txt$/ =~ filename
     file = "#{outdir}\\#{filename}"
     puts "SFTPing #{file}"
     sftp.upload!(file) 
     puts "SFTP Complete for file #{file}"
     puts "Cleanup"
     puts "Deleting #{file}."
     File.delete(file)
     puts "Files were deleted." 
     end
end
#puts "Closing SFTP connection..." 
#sftp.close()
puts "SFTP connection closed."
end

答案 1 :(得分:0)

SFTP 是一种基于网络协议 SSH(安全外壳)的完全不同的协议。

阅读SFTP vs. FTPS: The Key Differences

使用 gem net-sftp

例如:

require "net/sftp"

Net::SFTP.start("host", "username", :password: "password") do |sftp|
    #from your system(local)
    sftp.upload!("/path/to/local", "/path/to/remote")
    
    # through URL
    open(your_file_url) do |file_data|
        sftp.upload!(file_data, /path/to/remote)
    end
end