2012-01-24 97 views
3

是否有可能有一個末日應用路線處理大文件上傳通過POST與身體流這樣的:西納特拉上傳流

uri = URI('http://0.0.0.0:4567/files') 
file = File.open("/path/to/1.iso") 
req = Net::HTTP::Post.new(uri.path) 

req.content_type   = 'application/octet-stream' 
req['Transfer-Encoding'] = 'chunked' 
req.body_stream   = file 

Net::HTTP.start(uri.hostname, uri.port) do |http| 
    http.request(req) 
end 

這是一個Web服務,目前我看不到如何處理這一點,我試圖發出這個請求,我的實際路徑:

post '/file' do 
    File.open('/path/to/downloaded.iso', 'ab') do |file| 
    file << request.body.read 
    end 
end 

但它顯然失敗:

`!! Unexpected error while processing request: closed stream` 

也不能得到一個不流媒體版本的工作。

非常感謝任何幫助,謝謝。

回答

3
req['Transfer-Encoding'] 

不強制的Net :: HTTP使用分塊編碼上傳,而只是將西納特拉認爲這是分塊。請參閱this gist實現分塊上傳。

Excon是一個不錯的HTTP Ruby客戶端,用於在this commit之後實現分塊上傳。