【问题标题】:Download a file keeping original filename when final link is hidden隐藏最终链接时下载保留原始文件名的文件
【发布时间】:2018-07-26 01:06:50
【问题描述】:

我需要下载一个文件,将其保存在一个文件夹中,同时保留网站上的原始文件名。

url <- "http://www.seg-social.es/prdi00/idcplg?IdcService=GET_FILE&dID=187112&dDocName=197533&allowInterrupt=1"

从网络浏览器中,如果您单击该链接,您将下载一个具有此文件名的 excel 文件:

AfiliadosMuni-02-2015.xlsx

我知道我可以使用 R 中的命令 download.file 轻松下载它,如下所示:

download.file(url, "test.xlsx", method = "curl")

但我的脚本真正需要的是在保持原始文件名不变的情况下下载它。我也知道我可以像这样在控制台中使用 curl 来做到这一点。

curl -O -J $"http://www.seg-social.es/prdi00/idcplg?IdcService=GET_FILE&dID=187112&dDocName=197533&allowInterrupt=1"

但是,我再次需要在 R 脚本中使用它。有没有一种类似于上述方法但在 R 中的方法?我查看了 RCurl 包,但找不到解决方案。

【问题讨论】:

    标签: r curl download rcurl


    【解决方案1】:

    你总是可以这样做:

    library(httr)
    library(stringr)
    
    # alternate way to "download.file"
    fil <- GET("http://www.seg-social.es/prdi00/idcplg?IdcService=GET_FILE&dID=187112&dDocName=197533&allowInterrupt=1", 
               write_disk("tmp.fil"))
    # get what name the site suggests it shld be
    fname <- str_match(headers(fil)$`content-disposition`, "\"(.*)\"")[2]
    # rename
    file.rename("tmp.fil", fname)
    

    【讨论】:

    • 如果headers 没有content-disposition 成员怎么办?
    【解决方案2】:

    我认为basename() 是最简单的选择https://www.rdocumentation.org/packages/base/versions/3.4.3/topics/basename

    例如

    download.file(url, basename(url))

    【讨论】:

    • 因为你喜欢 dcplg?IdcService=GET_FILE&amp;dID=187112&amp;dDocName=197533&amp;allowInterrupt=1 这样的文件名? (这是 basename() 在示例 URL 上生成的内容)
    猜你喜欢
    • 2015-06-09
    • 2022-01-26
    • 2021-02-07
    • 1970-01-01
    • 2012-11-15
    • 2020-02-16
    • 1970-01-01
    • 2018-03-14
    相关资源
    最近更新 更多