如何用R的download.file将文件下载到指定文件夹并保留原文件名?
解决方案
要实现指定文件夹下载并获取服务器返回的原文件名,核心是先从响应头中提取文件名,再拼接目标路径完成下载。以下是具体实现:
步骤说明
- 发送请求获取响应头,解析服务器返回的文件名(通常在
Content-Disposition头中) - 若服务器未返回文件名,根据响应的内容类型(
Content-Type)自动生成合理的默认文件名 - 拼接目标文件夹与文件名,完成下载
代码实现
# 加载httr包(若未安装先执行 install.packages("httr")) library(httr) # 请求URL web <- "https://www.find-school-performance-data.service.gov.uk/download-data?download=true®ions=0&filters=GIAS&fileformat=xls&year=2021-2022&meta=false" # 指定目标文件夹(替换为你需要的路径) target_dir <- tempdir() # 发送HEAD请求获取响应头(比GET更轻量,仅获取头部信息) resp <- HEAD(web) # 提取并解析文件名 disposition_header <- headers(resp)$`content-disposition` if (!is.null(disposition_header)) { # 正则匹配Content-Disposition中的文件名 filename <- sub('.*filename="([^"]+)".*', '\\1', disposition_header) } else { # 若没有文件名,根据内容类型推断 content_type <- headers(resp)$`content-type` filename <- if (grepl("zip", content_type, ignore.case = TRUE)) "school_data.zip" else "school_data.xlsx" } # 拼接完整的目标文件路径 target_file_path <- file.path(target_dir, filename) # 下载文件到指定路径,覆盖已存在的同名文件 GET(web, write_disk(target_file_path, overwrite = TRUE), progress()) # 验证下载结果 if (file.exists(target_file_path)) { cat("文件下载完成,路径:", target_file_path, "\n") cat("文件名:", filename, "\n") } else { cat("下载失败,请检查URL或网络连接\n") }
原代码问题解释
你之前使用download.file直接传入文件夹路径失败,是因为该函数要求必须指定完整的文件名,不能仅传入目录。错误提示中的“不存在该文件或目录”,是因为你传入的是目录路径而非具体文件名,导致函数无法创建目标文件。
警告信息翻译
警告信息:
1: 在download.file(web, paste0(td, "\\"), mode="wb")中:
URL https://www.find-school-performance-data.service.gov.uk/download-data?download=true®ions=0&filters=GIAS&fileformat=xls&year=2021-2022&meta=false:无法打开目标文件'C:\Users\USER\AppData\Local\Temp\RtmpWi98JC', 原因是'不存在该文件或目录'
2: 在download.file(web, paste0(td, "\\"), mode="wb")中:
下载的退出状态非零
内容的提问来源于stack exchange,提问作者pluke
相关产品推荐
相关产品推荐

