2015-06-30 25 views
35

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ì?

+5

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

+0

@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

+3

Trong thời gian chờ đợi, bạn có thể sử dụng 'hệ thống' để gọi trực tiếp curl. – tonytonov

Trả lời

14

lỗi này được cố định trong phiên bản dev của httr/curl:

devtools::install_github("jeroenooms/curl") 
devtools::install_github("hadley/httr") 

Đây là một lỗi trong httrcurl gói cho R. Các lỗi đã được fixed on GitHub như của 02 tháng bảy năm 2015, và thay đổi sẽ sớm được triển khai cho CRAN.

Cũng có thể tôi đã gọi RCurl không chính xác trong lệnh trên, nhưng tôi không bao giờ có thể tìm ra lời gọi chính xác.

+2

_If_ bạn thực sự sao chép-dán lệnh trên, bạn nhập sai ** uft-8 **, ** utf-8 ** – zerweck

+1

@zerweck Tốt bắt! Tôi nghĩ bạn có thể sử dụng nút '(chỉnh sửa)' bên dưới bài đăng của tôi để đề xuất chỉnh sửa, sau đó tôi có thể xem xét. – Zach

Các vấn đề liên quan