由于某种原因,在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
答案 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