使用RCurl(或任何其他方法)从FTP下载.RData和.csv文件

时间:2013-09-16 16:34:25

标签: r ftp download rcurl

我已将.RData文件(使用save()创建)上传到ftp服务器,我正在尝试使用getURL()下载该文件。对于我读过的所有示例和帖子,我似乎无法使其工作。

.RData文件使用以下方式保存:

save(results, file=RDataFilePath, compress="xz") #save object "results" w/ compression
#RDataFilePath is the location of the results.RData file on my harddrive

使用以下网址上传这些数据:

uploadURL <-"ftp://name:password@host/folder/results.RData" #name the url
ftpUpload(RDataFilePath, to=uploadURL, connecttimeout=120) #upload

这是我尝试使用getURL

下载results.RData的方法
downloadURL <- "host/folder/results.RData"
load(getURL(downloadURL, userpwd="name:password", connecttimeout=120))

会出现以下错误:

Error in curlPerform(curl = curl, .opts = opts, .encoding = .encoding) : 
  embedded nul in string: 'ý7zXZ'

当我将downloadURL字符串粘贴到我的浏览器中时,.RData文件立即下载,所以我知道没有拼写错误。错误消息表明url无法读取压缩格式的b / c;但是,当我使用save() w / o压缩时,我收到类似的错误消息。

尝试从FTP下载.csv时,我也收到错误消息:

read.csv(getURL(downloadURL1)) #downloadURL1 is similar to downloadURL, but points to the .csv file
Error in file(file, "rt") : cannot open the connection 

然后发出警告,指出In addition: Warning message: In file(file, "rt") : cannot open file然后开始列出.csv的内容。

我一直试图在早上的大部分时间里弄清楚这一点,我觉得我必须遗漏一些非常基本的东西。我猜我需要更改一些curl选项,以便它知道它将要读取的文件类型。我的语法可能有点偏,我没有正确使用getURL,但我不确定我应该做什么。

任何提示都将不胜感激。

P.S。我目前的方法是基于Post

2 个答案:

答案 0 :(得分:9)

您可以尝试将其分为两个步骤:首先下载文件,然后加载它。

download.file(downloadURL, "temp.rData")
load("temp.rData")

或坚持使用rCurl,您可以尝试:

bin = getBinaryURL(downloadURL, ...yourOtherParams...) 
writeBin(bin, "temp.rData")  
load("temp.rData")

答案 1 :(得分:4)

我花了相当多的时间在这上面 - 希望在Shiny应用程序中使用它,所以我不想写入磁盘。

library(RCurl)
url <- "ftp://F1World@aesius.ca/ALLF1Data.Rda"
userpwd <- "name:password"
bin = getBinaryURL(url, userpwd = userpwd, verbose = TRUE,
                   ftp.use.epsv = TRUE)

load(rawConnection(bin))

通过使用rawConnection(),我能够避免写入磁盘步骤,因为它完美地处理了RAW数据类型并避免了错误。 仅供参考 - 这是我的第一篇文章,所以我希望它有用