在没有下载整个文件的情况下,是否有一种相当直接的方法来确定远程文件的文件大小? Stack Overflow回答了如何执行此操作with PHP and curl,所以我想在R中也可以这样做。如果可能的话,我认为最好避免RCurl,因为这需要为非Windows用户额外安装?
在this survey analysis website上,我写了很多脚本来自动下载政府机构(如美国人口普查局和cdc)的大数据文件。我正在尝试通过创建“下载缓存”来实现一个不下载已经下载的文件的附加组件 - 但我担心这个“下载缓存”可能会在以下情况下被破坏: 1)主机网站更改文件或2)用户在中途取消下载。因此,在决定是从源HTTP或FTP站点下载文件时,我想将本地文件大小与远程文件大小进行比较..如果它们不相同,请再次下载该文件。
答案 0 :(得分:6)
如今,一种直截了当的方法可能是
response = httr::HEAD(url)
httr::headers(response)[["Content-Length"]]
我原来的答案是:更“手动”的方法是设置CURLOPT_NOBODY option(请参阅Linux上的man curl_easy_setopt
,基本上是通过查看链接问题的答案来启发)并告诉{{ 1}}和朋友一起返回标题和请求
getURL
library(RCurl)
url = "http://stackoverflow.com/questions/20921593/how-to-determine-the-file-size-of-a-remote-download-without-reading-the-entire-f"
xx = getURL(url, nobody=1L, header=1L)
strsplit(xx, "\r\n")
## [[1]]
## [1] "HTTP/1.1 200 OK"
## [2] "Cache-Control: public, max-age=60"
## [3] "Content-Length: 60848"
## [4] "Content-Type: text/html; charset=utf-8"
## [5] "Expires: Sat, 04 Jan 2014 14:09:58 GMT"
## [6] "Last-Modified: Sat, 04 Jan 2014 14:08:58 GMT"
## [7] "Vary: *"
## [8] "X-Frame-Options: SAMEORIGIN"
## [9] "Date: Sat, 04 Jan 2014 14:08:57 GMT"
## [10] ""
处的峰值建议url.exists
解析HTTP标头。 parseHTTPHeader(xx)
也适用于ftp网址。
getURL
答案 1 :(得分:5)
url <- "http://cdn.meclabs.com/training/misc/2013_Marketing_Analytics_BMR-StrongView.pdf"
library(RCurl)
res <- url.exists(url, .header=TRUE)
as.numeric(res['Content-Length'])
# [1] 42413630
## bytes