You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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&regions=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&regions=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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 18:10:49