Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 事件机:如何接收文件上载?_Ruby_Eventmachine - Fatal编程技术网

Ruby 事件机:如何接收文件上载?

Ruby 事件机:如何接收文件上载?,ruby,eventmachine,Ruby,Eventmachine,对于普通的Ruby/Rails应用程序来说,这有点不同寻常。我正在构建一个主要在事件机上运行的应用程序。WEBrick提供了一些HTML文件,但大多数应用程序都使用javascript在客户端运行,并通过Web套接字连接到我的事件机应用程序。我需要能够接受文件上传并将其存储在本地。如何做到这一点 更新:如果您感兴趣,.如果您需要通过web套接字连接进行上传,因此无法使用标准Rails控制器进行此操作,请使用EventMachine.defer生成一个新线程来管理文件上传,而不阻塞您的反应器。请在

对于普通的Ruby/Rails应用程序来说,这有点不同寻常。我正在构建一个主要在事件机上运行的应用程序。WEBrick提供了一些HTML文件,但大多数应用程序都使用javascript在客户端运行,并通过Web套接字连接到我的事件机应用程序。我需要能够接受文件上传并将其存储在本地。如何做到这一点


更新:如果您感兴趣,.

如果您需要通过web套接字连接进行上传,因此无法使用标准Rails控制器进行此操作,请使用EventMachine.defer生成一个新线程来管理文件上传,而不阻塞您的反应器。

请在GitHub上查看此项目:


下面链接上的代码(server.rb中的代码可能是一个起点),唯一的警告是使用Sinatra,但您可以(希望)轻松地将其应用于WEBrick:

首先,这里是如何使用Sinatra构建简单的文件上载:

因此,现在要使用thin运行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
classmywebapp
thin在内部使用eventmachine,我想webrick使用线程,但老实说,我从未真正研究过它

您应该在ruby进程之前使用apache或nginx,至少在文件上传时是这样(我认为websockets无法完成)。 如果需要,我可以包括一个简单的nginx配置(只需要在我的磁盘xD上找到它)

编辑:另一种解决方案是使用goliath作为web服务器,这里有一个示例:
如果你不需要显示上传进度,你应该使用sinatra+nginx/apache。

查看HTTP中的
多部分/表单数据的规范,并复制该方法。在谷歌搜索“HTTP文件上传”时。例如,这里:更非正式地说,这里:这将有帮助:下面链接(server.rb)上的代码可能会有帮助,唯一的警告是它使用Sinatra,但您可以(希望)轻松地将其改编为WEBrick:您使用WEBrick为运行eventmachine反应器的页面提供服务有什么原因吗?至于这个问题,简单的HTTP上传就足够了,还是你在寻找其他东西?@Schmurfy我之所以使用WEBrick,是因为我对Ruby/EventMachine/etc不熟悉,不知道有更好的方法。如果您知道更好的方法,请帮助!=]简单的HTTP上传就可以了。你能再详细一点吗?显然,我不能使用Rails控制器,因为我没有使用Rails。但我如何告诉EventMachine我希望它“管理文件上传”?