gpt4 book ai didi

ruby - 如何上传包含远程文件目标的文件作为 URL 的一部分?

转载 作者:数据小太阳 更新时间:2023-10-29 08:49:33 24 4
gpt4 key购买 nike

我有以下上传文件的方法:

def send_to_ftp(sourcefile,host,port,username,password,log_path)
begin
ftp =Net::FTP.new
ftp.connect(host, port)
ftp.passive = true
ftp.login(username, password)
ftp.chdir(host)
ftp.putbinaryfile(sourcefile)
ftp.close
return true
rescue Exception => err
puts err.message
return false
end
end

当我输入 URL 作为 hostname.com/path/to/ftpupload 时,我收到错误消息:“名称或服务未知”。但是,如果我只输入“hostname.com”作为主机,它可以工作,但这意味着无法确定将文件放在 ftp 服务器上的位置

最佳答案

connecthost 参数不能是“hostname.com/path/to/ftpupload”。根据文档,它:

Establishes an FTP connection to host...

“主机”将是“hostname.com”,因此您需要将该字符串拆分为必要的组件。

我会利用 Ruby 的 URI 类并传入完整的 URL:

ftp://hostname.com/path/to/ftpupload

让 URI 解析可以很容易地从中获取部分:

require 'uri'
uri = URI.parse('ftp://hostname.com/path/to/ftpupload')
uri.host
# => "hostname.com"
uri.path
# => "path/to/ftpupload"

我是这样写的:

require 'uri'

def send_to_ftp(sourcefile, host, username, password, log_path)
uri = URI.parse('ftp://' + host)

ftp = Net::FTP.new
ftp.connect(uri.host, uri.port)
ftp.passive = true
ftp.login(username, password)
ftp.chdir(uri.path)
ftp.putbinaryfile(sourcefile)
ftp.close

true

rescue Exception => err
puts err.message
false
end

再进行两处更改,您可以进一步简化代码。将方法定义更改为:

def send_to_ftp(sourcefile, host, log_path)

和:

  ftp.login(uri.user, uri.password)

允许您使用带有嵌入式用户名和密码的 URL 调用代码:

username:password@hostname.com/path/to/ftpupload

这是使用其中包含的用户 ID 和密码调用 Internet 资源的标准方法。

此时你剩下:

require 'uri'

def send_to_ftp(sourcefile, host, log_path)
uri = URI.parse('ftp://' + host)

ftp = Net::FTP.new
ftp.connect(uri.host, uri.port)
ftp.passive = true
ftp.login(uri.user, uri.password)
ftp.chdir(uri.path)
ftp.putbinaryfile(sourcefile)
ftp.close

true

rescue Exception => err
puts err.message
false
end

您的方法调用如下所示:

send_to_ftp(
'path/to/source/file',
'username:password@hostname.com/path/to/ftpupload',
log_path
)

关于ruby - 如何上传包含远程文件目标的文件作为 URL 的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16792580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com