Tôi đã có một quá trình thủ công, nơi tôi đang tải lên tập tin 5-6 GB đến một máy chủ web thông qua curl:Tải lên một tập tin trên 2,15 GB trong R
curl -X POST --data-binary @myfile.csv http://myserver::port/path/to/api
Quá trình này hoạt động tốt, nhưng tôi d tình yêu để tự động hóa nó bằng cách sử R. vấn đề là, tôi hoặc là không biết những gì tôi đang làm, hoặc các thư viện R cho curl không biết làm thế nào để xử lý các file lớn hơn 2GB ~:
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 không hoạt động eithe r:
library(httr)
POST(
url = "http://myserver:port/path/to/api",
body = upload_file(
path = path.expand("myfile.csv"),
type = 'text/csv'),
verbose()
)
nào mang lại:
Response [http://myserver:port/path/to/api]
Date: 2015-06-30 11:11
Status: 400
Content-Type: <unknown>
<EMPTY BODY>
httr là một chút thông tin mới hơn với các tùy chọn verbose()
, nói với tôi:
-> 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
<-
Các Content-Length: -2147483648
vẻ nghi ngờ giống như một số nguyên tràn 32 bit , vì vậy tôi nghĩ rằng đây là một lỗi trong httr. Tôi nghi ngờ RCurl đang gặp một thất bại tương tự.
Tôi thực sự yêu một trình bao bọc tối thiểu xung quanh curl -X POST --data-binary
, nhưng chặn đó, các tùy chọn của tôi để tải lên các tệp khá lớn từ R là gì?
Tôi giả sử bạn đang sử dụng phiên bản mới nhất của ** httr ** đang sử dụng gói [curl] (https://github.com/jeroenooms/curl/tree/master/R) R. Nếu bạn không thể làm cho nó hoạt động bằng cách sử dụng gói của Jeroen trực tiếp (bỏ qua httr), nó có thể nhanh hơn để tạo ra một vấn đề trên github. – joran
@joran Có Tôi đang sử dụng httr, phụ thuộc vào curl. Tôi đã thực hiện một vấn đề github, nhưng trong khi chờ đợi, tôi tò mò muốn biết nếu có ai tải lên một tệp 2.2GB + lên một dịch vụ web từ R. Tôi không thể là người đầu tiên trong lịch sử cố gắng làm điều này ... – Zach
Trong thời gian chờ đợi, bạn có thể sử dụng 'hệ thống' để gọi trực tiếp curl. – tonytonov