(多部分)zip 上传到 ruby 由 rack 处理的 webmachine

(Multipart) zip upload in ruby webmachine handled by rack

我正在 ruby webmachine 应用程序中制作 zip 的上传表单。我的想法是通过我的后端上传,我可以在其中添加一些额外的参数,然后使用 RestClient 将其上传到亚马逊 s3 服务。

我确实成功地创建了一个直接上传(基于 Web 的表单 post)到 s3bucket,但是这样我无法按照我想要的方式处理请求中需要的变量。

我已经尝试了几件事,但我无法弄清楚一旦请求进入我的后端如何处理它。我已经创建了一个资源,并且直接在 process_post 方法中进行调试。

我的 @request 变量表示一个 Webmachine::Request,一个 Webmachine::Adapters::Rack::RequestBody 和一个 Rack::Request,但我无法从中取出文件以将其用作输入我的 RestClient 请求。

我认为; @request.body.to_s@request.body.to_io 以某种方式表示上传的文件,我尝试将它们用作 Rack::Multipart 方法的输入,但这并没有给我文件。

我也尝试使用 rack-raw-upload gem,但除了 "application/x-www-form-urlencoded" 或 multipart,我无法获得其他 mime 类型。我确实明确地将其设置为; application/octet-stream

诸如 File.new(filename, 'rb') 之类的东西给了我 `rrno::ENOENT: No such file or directory @ rb_sysopen'。对于文件名,我只使用了 'example.zip'.

我想我遗漏了一些与 Rack::Request call(env) 方法有关的东西。

有人知道如何处理 Rack 上传吗?或者给我任何新方向的提示?谢谢。

我创建了一个要点来展示如何检索多部分流。您需要进一步解析才能获得上传的文件。

https://gist.github.com/jewilmeer/eb40abd665b70f53e6eb60801de24342