有没有办法将文件写入使用R使用SSL的FTP服务器?

时间:2018-02-21 19:23:39

标签: r ssl rcurl ftps quickbase

我有一个R脚本,使用RCurl以.csv格式从QuickBase中提取数据。目前,在使用write.table函数时,我只需将其指向本地文件夹即可。我想直接写入我认为使用SSL的FTP站点。我有一个用户名和密码,可以在选择连接类型" FTP-SSL(Explict AUTH Over TLS)"后,使用cyberduck等客户端进行连接。

我尝试过使用ftpUpload函数,但拒绝让我进行连接。

任何有关下一步观看的帮助或建议都表示赞赏。

1 个答案:

答案 0 :(得分:0)

高级

我知道完成此操作的最佳方法(在R中)是将调用包装到系统函数中。我个人使用lftp,它具有良好的处理能力:

  • FTPS
  • 多个文件输入/输出
  • 正则表达式和通配符文件命名

这确实具有硬件特定的缺点; R并不完全包含在内。那就是说,可以通过利用擅长他们所做工具的工具来节省你很多时间。

样本包装

LFTP的包装器看起来像下面的功能 - 这是我在生产中使用的变体;我删除了依赖于更广泛的包的日志记录功能。从根本上说,这就是为我移动文件的原因。

#' lftp wrapper to get/put file(s) from ftp-like sites
#'
#' @param process list, pipeable etl objects
#' @param configuration vector (text), list of
#' arguments to supply after call to lftp
#' @param skip boolean, whether to skip this step (testing)
#'
#' @details wrapper around lftp command line tool
#'
#' @export
#'
ftp <- function(configuration, skip = FALSE) {
    if (!skip) {
        system2("lftp",
            args = configuration)
    }
}

配置

包装器的最大部分是configuration向量。配置向量允许您将一组任意参数传递给lftp,包括完成工作所需的参数。

示例配置向量可能如下所示:

c(
    'your.ftp-server.com',
    paste("-e", '"put '/path/to/file.csv' -o '/destination/'; exit;"'
)

注意你需要小心引用(或者你可以合并shQuote(),但这是一个不同的项目。)

将它放在一起

要回答您的具体问题,您可以在R中使用它来:

  • 使用rCurl
  • 从Quick Base获取您正在使用的数据
  • 将其写入硬件上的某个文件
  • 使用ftp()利用lftp将文件发送到目的地