Ruby 将字符串转换为文件以上传到 FTP

标签 ruby csv ftp stringio

目前我们有一个方法可以返回带有格式化 CSV 文件的字符串。

string   = EXPORT.tickets

我们需要像这样将这个csv文件上传到ftp服务器

ftp = Net::FTP.new(server, username, password)
ftp.putbinaryfile(string)

但是,string 变量显然是一个字符串,而不是 putbinaryfile 方法所期望的二进制文件。我看到有两种方法可以做到这一点,

  1. 首先使用 Filestring 变量转换为文件
  2. 使用StringIO 将字符串直接转换为文件

这些看起来是可行的选择吗?如果是这样,我将如何处理,在此先感谢!

编辑:

由于 putbinaryfile 方法正在查找文件路径而不是实际文件,看起来我最好的办法是从 string 变量创建一个文件。谁能举例说明如何实现这一点?

最佳答案

在与另一位开发人员交谈后,他给了我这个解决方案,我发现这个解决方案更适合我的情况,因为该文件当时还不存在。它跳过将字符串写入临时文件并使用 StringIO 直接上传它。他的解决方案:

Net::FTP#putbinaryfile 方法将本地文件系统上的文件的名称 复制到远程文件系统。现在,如果您的数据是一个字符串(并且不是从文件系统上的文件中读取的),那么您可能想改用 Net::FTP#storbinary:

require 'stringio'
require 'net/ftp'

BLOCKSIZE = 512 
data      = StringIO.new("Hello, world!\n")
hostname  = "ftp.domain.tld"
username  = "username"
password  = "password"

remote_filename = "something.txt"

Net::FTP.open(hostname, username, password) do |ftp|
  # ...other ftp commands here...
  ftp.storbinary("STOR #{remote_filename}", data, BLOCKSIZE)
  # ...any other ftp commands...
end

上面的代码避免了将不在磁盘上的数据写入磁盘,这样你就可以将它上传到某个地方。但是,如果数据已经在磁盘上的文件中,您还不如修改代码以引用其文件名。

关于Ruby 将字符串转换为文件以上传到 FTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28073410/

相关文章:

ruby-on-rails - 如何将 Rails 代码添加到 div 标签中的 id 属性?

python - Bcp 命令进入 Microsoft Azure

java - Apache POI 解析和处理空单元格

c# - 想要使用 C# (FtpWebResponse) 从 FTP 读取文件列表,但它返回 HTML

ruby-on-rails - 修复 ruby​​ 中的重复方法

ruby 公案 : test_nil_is_an_object

javascript - D3.JS 访问名称较长的 TSV 列

c# - 使用FtpWebRequest上传文件时获取 "Invalid URL"

c# - 在 C# (.NET 4.6) 中关闭 keep-alive FTP 或 FTPS 连接的最佳方法?

ruby-on-rails - Rails 元编程和性能