在 R 中上传超过 2.15 GB 的文件
Upload a file over 2.15 GB in R
我有一个手动过程,我通过 curl 将 5-6 GB 的文件上传到网络服务器:
curl -X POST --data-binary @myfile.csv http://myserver::port/path/to/api
此过程运行良好,但我喜欢使用 R 使其自动化。问题是,我不知道自己在做什么,或者 curl 的 R 库不知道如何处理大于 ~2GB 的文件:
library(RCurl)
postForm(
"http://myserver::port/path/to/api",
file = fileUpload(
filename = path.expand("myfile.csv"),
contentType = "text/csv"
),.encoding="utf-8")
产量Error: Internal Server Error
httr 也不起作用:
library(httr)
POST(
url = "http://myserver:port/path/to/api",
body = upload_file(
path = path.expand("myfile.csv"),
type = 'text/csv'),
verbose()
)
产生:
Response [http://myserver:port/path/to/api]
Date: 2015-06-30 11:11
Status: 400
Content-Type: <unknown>
<EMPTY BODY>
httr 通过 verbose()
选项提供更多信息,告诉我:
-> POST http://myserver:port/path/to/api
-> User-Agent: libcurl/7.35.0 r-curl/0.9 httr/1.0.0
-> Host: http://myserver::port
-> Accept-Encoding: gzip, deflate
-> Accept: application/json, text/xml, application/xml, */*
-> Content-Type: text/csv
-> Content-Length: -2147483648
-> Expect: 100-continue
->
<- HTTP/1.1 400 Bad Request
<- Server: Apache-Coyote/1.1
<- Transfer-Encoding: chunked
<- Date: Tue, 30 Jun 2015 11:11:11 GMT
<- Connection: close
<-
Content-Length: -2147483648
看起来很像 32 位整数溢出,所以我认为这是 httr 中的一个错误。我怀疑 RCurl 遇到了类似的故障。
我真的很喜欢 curl -X POST --data-binary
周围的最小包装器,但除此之外,我从 R 上传相当大的文件有哪些选择?
此错误已在 httr/curl 的开发版本中修复:
devtools::install_github("jeroenooms/curl")
devtools::install_github("hadley/httr")
这是自 2015 年 7 月 2 日起 httr and curl packages for R. The bug has been fixed on GitHub 中的一个错误,此更改将很快推广到 CRAN。
也有可能我在上面的命令中错误地调用了 RCurl,但我一直无法找出正确的调用。
我有一个手动过程,我通过 curl 将 5-6 GB 的文件上传到网络服务器:
curl -X POST --data-binary @myfile.csv http://myserver::port/path/to/api
此过程运行良好,但我喜欢使用 R 使其自动化。问题是,我不知道自己在做什么,或者 curl 的 R 库不知道如何处理大于 ~2GB 的文件:
library(RCurl)
postForm(
"http://myserver::port/path/to/api",
file = fileUpload(
filename = path.expand("myfile.csv"),
contentType = "text/csv"
),.encoding="utf-8")
产量Error: Internal Server Error
httr 也不起作用:
library(httr)
POST(
url = "http://myserver:port/path/to/api",
body = upload_file(
path = path.expand("myfile.csv"),
type = 'text/csv'),
verbose()
)
产生:
Response [http://myserver:port/path/to/api]
Date: 2015-06-30 11:11
Status: 400
Content-Type: <unknown>
<EMPTY BODY>
httr 通过 verbose()
选项提供更多信息,告诉我:
-> POST http://myserver:port/path/to/api
-> User-Agent: libcurl/7.35.0 r-curl/0.9 httr/1.0.0
-> Host: http://myserver::port
-> Accept-Encoding: gzip, deflate
-> Accept: application/json, text/xml, application/xml, */*
-> Content-Type: text/csv
-> Content-Length: -2147483648
-> Expect: 100-continue
->
<- HTTP/1.1 400 Bad Request
<- Server: Apache-Coyote/1.1
<- Transfer-Encoding: chunked
<- Date: Tue, 30 Jun 2015 11:11:11 GMT
<- Connection: close
<-
Content-Length: -2147483648
看起来很像 32 位整数溢出,所以我认为这是 httr 中的一个错误。我怀疑 RCurl 遇到了类似的故障。
我真的很喜欢 curl -X POST --data-binary
周围的最小包装器,但除此之外,我从 R 上传相当大的文件有哪些选择?
此错误已在 httr/curl 的开发版本中修复:
devtools::install_github("jeroenooms/curl")
devtools::install_github("hadley/httr")
这是自 2015 年 7 月 2 日起 httr and curl packages for R. The bug has been fixed on GitHub 中的一个错误,此更改将很快推广到 CRAN。
也有可能我在上面的命令中错误地调用了 RCurl,但我一直无法找出正确的调用。