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

使用curl::curl_upload上传大文件时进度显示崩溃的解决咨询

解决curl::curl_upload上传大文件时进度显示崩溃的问题

问题原因分析

你推测的完全正确:报错根源是默认进度逻辑里sprintf用了%d整数格式符。32位有符号整数的最大值是231-1(即2147483647),你上传的字节数2147418112已经非常接近这个阈值,加上进度按216步长更新,下一次统计的字节数会超出32位有符号整数范围,R会自动将其转为浮点型,此时用%d格式就会触发类型不匹配的报错。

解决方案

你复制代码自定义curl_upload2的思路可行,但有更简洁的替代方案——直接自定义进度回调函数,无需复制整个curl_upload代码:

  1. 定义自定义进度回调函数
custom_progress <- function(total_bytes, uploaded_bytes) {
  # 用%.0f处理大数值,保证整数显示且不报错
  cat(sprintf("\rUploaded %.0f bytes...", uploaded_bytes))
  # 上传完成后换行提示
  if (uploaded_bytes == total_bytes) cat("\nUpload complete!\n")
}
  1. 调用curl_upload时传入自定义进度函数
    保持verbose = TRUE以保留进度显示,同时通过progress参数替换默认逻辑:
curl::curl_upload(
  "你的大文件路径.csv",
  url = "ftp://你的服务器地址/目标路径.csv",
  verbose = TRUE,
  progress = custom_progress
)

方案对比

  • 自定义进度回调的方式更轻便,不用维护完整的curl_upload代码,后续curl包更新时也无需同步修改自定义函数的其他部分。
  • 若你坚持复制原函数修改,注意要把所有涉及字节数统计的%d格式都替换成%.0f,避免遗漏其他可能触发报错的地方。

内容的提问来源于stack exchange,提问作者qwertzuiop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:33:20