這對於普通的Ruby/Rails應用程序來說有點不同尋常。我正在構建一個主要在Event Machine上運行的應用程序。有幾個HTML文件是從WEBrick提供的,但大多數應用程序都運行在客戶端,使用JavaScript,並通過Web Socket連接到我的Event Machine應用程序。我需要能夠接受文件上傳並將其存儲在本地。如何才能做到這一點?事件機器:如何接收文件上傳?
更新:如果你有興趣,here is a link to the source code。
這對於普通的Ruby/Rails應用程序來說有點不同尋常。我正在構建一個主要在Event Machine上運行的應用程序。有幾個HTML文件是從WEBrick提供的,但大多數應用程序都運行在客戶端,使用JavaScript,並通過Web Socket連接到我的Event Machine應用程序。我需要能夠接受文件上傳並將其存儲在本地。如何才能做到這一點?事件機器:如何接收文件上傳?
更新:如果你有興趣,here is a link to the source code。
首先這裏是如何建立與西納特拉一個簡單的文件上傳:File upload with Sinatra
所以現在與薄,你可以在你的代碼做運行Web服務器:
class MyWebApp < Sinatra::Base
# here goes the sinatra app code
post '/something' do
# ...
end
end
EM::run do
Thin::Server.start('0.0.0.0', 8000) do
map('/'){ run MyWebApp.new }
end
end
瘦使用eventmachine內部,我想webrick使用線程,但老實說,我從來沒有真正看過它。
你應該在你的ruby進程前面至少使用apache或nginx來進行文件上傳(我認爲websockets將無法通過它)。 如果需要,我可以包含一個簡單的nginx配置(只需要在我的磁盤xD上找到它)。
編輯:另一種解決方案是使用巨人作爲Web服務器,你有一個例子在這裏:https://github.com/postrank-labs/goliath/blob/master/examples/async_upload.rb 如果您不需要顯示你應該留在西納特拉+ nginx的/ Apache的上傳進度。
請看看這個項目在GitHub上:http://www.github.com/igrigorik/em-websocket
以下鏈接代碼(在server.rb代碼可能是一個起點),唯一需要注意的是它的使用西納特拉,但你可以(希望)輕鬆適應它的WEBrick:http://www.github.com/thirtysixthspan/waterunderice
查看HTTP中'multipart/form-data'的規範並複製該方法。 – millimoose 2012-02-08 01:09:48
當谷歌搜索「HTTP文件上傳」。例如。這裏:http://www.faqs.org/rfcs/rfc1867.html和更非正式的,在這裏:http://www.vivtek.com/rfc1867.html – millimoose 2012-02-08 23:27:30
這將有助於:https://github.com/igrigorik/em-websocket 以下鏈接(server.rb)上的代碼可能會有所幫助,唯一需要注意的是它使用Sinatra,但是您可以(希望)輕鬆地將其修改爲WEBrick:https://github.com/thirtysixthspan/waterunderice – 2012-02-15 12:11:02