【问题标题】:Event Machine: How to receive file uploads?事件机器:如何接收文件上传?
【发布时间】:2012-02-16 17:17:46
【问题描述】:

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

更新:如果你有兴趣,here is a link to the source code

【问题讨论】:

  • 查看 HTTP 中 multipart/form-data 的规范并复制该方法。
  • 当谷歌搜索“HTTP 文件上传”时。例如。这里:faqs.org/rfcs/rfc1867.html 和更非正式的,这里:vivtek.com/rfc1867.html
  • 这将有所帮助:github.com/igrigorik/em-websocket 以下链接 (server.rb) 上的代码可能会有所帮助,唯一需要注意的是它使用 Sinatra,但您可以(希望)轻松地将其改编为 WEBrick:@987654325 @
  • 您是否有理由使用 Webrick 来提供运行 eventmachine 反应器的页面?至于问题是简单的 HTTP 上传就足够了,还是您正在寻找其他东西?
  • @Schmurfy 我使用 WEBrick 的原因是因为我是 Ruby/EventMachine/etc 的新手,并且不知道更好的方法。如果您知道更好的方法,请帮助! =] 简单的 HTTP 上传就可以了。

标签: ruby eventmachine


【解决方案1】:

首先是如何使用 sinatra 构建简单的文件上传:File upload with 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

thin 在内部使用 eventmachine,我想 webrick 使用线程,但老实说我从未真正研究过。

你应该至少在你的 ruby​​ 进程前使用 apache 或 nginx 来上传文件(我认为 websockets 不能通过它)。 如果您需要,我可以包含一个简单的 nginx 配置(只需在我的磁盘 xD 上找到它)。

编辑:另一种解决方案是使用 goliath 作为 Web 服务器,这里有一个示例:https://github.com/postrank-labs/goliath/blob/master/examples/async_upload.rb 如果您不需要显示上传进度,您应该继续使用 sinatra+nginx/apache。

【讨论】:

    【解决方案2】:

    请在 GitHub 上查看这个项目:http://www.github.com/igrigorik/em-websocket

    以下链接上的代码(server.rb 中的代码可能是一个起点),唯一需要注意的是它使用 Sinatra,但您可以(希望)轻松地将其改编为 WEBrick:http://www.github.com/thirtysixthspan/waterunderice

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 您能详细说明一下吗?显然我不能使用 Rails 控制器,因为我没有使用 Rails。但是我如何告诉 EventMachine 我希望它“管理文件上传”?
      猜你喜欢
      • 1970-01-01
      • 2011-06-02
      • 2019-07-15
      • 2019-08-12
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多