【问题标题】:How to upload file to directory that is up from home directory using FTP in RCurl?如何使用 RCurl 中的 FTP 将文件上传到主目录中的目录?
【发布时间】:2015-06-25 22:23:27
【问题描述】:

我需要在 R 中使用 FTP 上传文件,但该目录来自我在服务器上的主目录。当我使用 RCurl 运行以下代码时,出现此错误:550 var: No such file or directory:

ftpUpload(what = "./plots/daily/LastTwentyFour.png",
      to = "ftp://spider/../../var/www/dashboard/img/LastTwentyFour.png",
      verbose = TRUE,
      userpwd = "REDACTED:REDACTED")

更具体地说,我得到这个输出:

> PWD
< 257 "/home/dhadley" is the current directory
* Entry path is '/home/dhadley'
> CWD var
* ftp_perform ends with SECONDARY: 0
< 550 var: No such file or directory
* Server denied you to change to the given directory
* Connection #0 to host spider left intact
Error in function (type, msg, asError = TRUE)  : 
Server denied you to change to the given directory

当我尝试上传到我的主目录时它可以工作:

ftpUpload(what = "./plots/daily/LastTwentyFour.png",
      to = "ftp://spider/LastTwentyFour.png",
      verbose = TRUE,
      userpwd = "REDACTED:REDACTED")

我想问题是,如何在 ftpUpload 函数中的目录之间导航?或者,如果有另一种方法可以将文件从 Windows 上传到 R 中的 Linux 服务器,我也对此持开放态度。提前致谢!

编辑:我对相关目录具有写入权限,并且能够在 FileZilla 中上传文件。不幸的是,我无法更改服务器上的主目录。

【问题讨论】:

  • 你能用 R 以外的其他程序将文件上传到那个目录吗?我猜答案是否定的,并且存在权限/所有权问题。
  • 哦,我刚刚意识到该路径中的“..”旨在脱离主目录并进入根目录。正如@MrFlick 所说,为此,您需要将服务器的主目录设置为“/”而不是“/home/dhadley”,正如他进一步指出的那样,您可能不应该这样做。除此之外,您为什么在问题中标记窗口?
  • @Dean,对不起:我还应该提到我对 ../../var/www/dashboard 目录具有写入权限。我可以在 FileZilla 中访问它。这是我们存储我工作的网站部分的地方。
  • @Dean 很遗憾,我无法更改服务器上的主目录。我添加了 Windows,以防除了 RCurl 之外有人对如何在 R 中移动文件有其他建议,但这可能是一个平淡无奇的标签。谢谢。
  • 你是说 FileZilla 会让你将 /var/ww/dashboard 指定为 /home/dhadley/../../var/www/dashboard?

标签: linux r windows ftp rcurl


【解决方案1】:

我没有 FTP 服务器来测试它,但类似

ftpUpload(what = "./plots/daily/LastTwentyFour.png",
  to = "ftp://spider/var/www/dashboard/img/LastTwentyFour.png",
  verbose = TRUE,
  userpwd = "REDACTED:REDACTED", prequote="CWD  /var/www/dashboard/img/")

prequote 参数应在尝试与给定路径交互之前将命令CWD(更改工作目录)传递给服务器。 filezilla 工作的原因是,当您在 gui 中双击“..”时,它正在向 FTP 服务器发送 CWD 命令。

【讨论】:

  • 非常感谢!第一次在prequote 中添加“CWD /var/www/dashboard/img/”。