【问题标题】:Is there a way to write a file to an FTP Server that uses SSL using R?有没有办法使用 R 将文件写入使用 SSL 的 FTP 服务器?
【发布时间】:2018-02-21 19:23:38
【问题描述】:

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

我试过只使用 ftpUpload 功能,但它拒绝让我建立连接。

感谢您提供有关下一步查看的任何帮助或建议。

【问题讨论】:

  • 您使用cyberduck 的测试与使用RCurl 的机器来自同一台机器?
  • 您是否可以在命令行中使用--ftp-ssl 选项进行卷曲?当您搜索 ftp 时,可以在 curl.haxx.se/docs/manual.html 找到一些相同的命令

标签: r ssl rcurl ftps quickbase


【解决方案1】:

高级

我知道(在 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 将文件发送到其目的地

【讨论】:

    猜你喜欢
    • 2011-02-18
    • 2021-11-09
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 2015-05-11
    • 1970-01-01
    相关资源
    最近更新 更多