Ho un processo manuale dove sto caricando file di 5-6 GB a un server web tramite ricciolo:caricare un file sopra 2,15 GB in R
curl -X POST --data-binary @myfile.csv http://myserver::port/path/to/api
Questo processo funziona bene, ma io' d amore di automatizzare utilizzando R. Il problema è che io o non so quello che sto facendo, o le librerie R per riccio non sanno come gestire i file più grandi di 2 GB ~:
library(RCurl)
postForm(
"http://myserver::port/path/to/api",
file = fileUpload(
filename = path.expand("myfile.csv"),
contentType = "text/csv"
),.encoding="utf-8")
Yeilds Error: Internal Server Error
httr non funziona eithe R:
library(httr)
POST(
url = "http://myserver:port/path/to/api",
body = upload_file(
path = path.expand("myfile.csv"),
type = 'text/csv'),
verbose()
)
che produce:
Response [http://myserver:port/path/to/api]
Date: 2015-06-30 11:11
Status: 400
Content-Type: <unknown>
<EMPTY BODY>
HTTR è un po 'più informativo con l'opzione verbose()
, dicendomi:
-> 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
<-
Il Content-Length: -2147483648
guarda con sospetto, come un integer overflow 32 bit , quindi penso che questo sia un bug in httr. Sospetto che RCurl stia vivendo un fallimento simile.
Mi piacerebbe davvero un involucro minimale attorno a curl -X POST --data-binary
, ma a meno che, quali sono le mie opzioni per il caricamento di file abbastanza grandi da R?
Suppongo che tu stia utilizzando l'ultima versione di ** httr ** che utilizza il pacchetto [curl] (https://github.com/jeroenooms/curl/tree/master/R) R. Se non riesci a farlo funzionare usando il pacchetto di Jeroen direttamente (bypassando httr) potrebbe essere più veloce creare un problema su github. – joran
@joran Sì, sto usando httr, che dipende dall'arricciatura. Ho fatto un problema github, ma nel frattempo sono curioso di sapere se qualcuno carica un file 2.2GB + in un servizio web da R. Non posso essere la prima persona nella storia a provare a farlo ... – Zach
Nel frattempo, è possibile utilizzare 'system' per richiamare direttamente curl. – tonytonov