【问题标题】:How to consume Multipart/form-data via Ruby Controllers?如何通过 Ruby 控制器使用 Multipart/form-data?
【发布时间】:2019-02-05 19:39:55
【问题描述】:

我知道我在控制器中收到了一个带有Content-Type:multipart/form-data 的文件,我知道该文件是这样上传的:

body[:uploaded_data] = Faraday::UploadIO.new(path, mime_type, hash[:filename])

而我收到的文件内容是这样的

    -------------RubyMultipartPost
Content-Disposition: form-data; name="filename"

1_BsKbDTA9ZUVroeJ7asId4Q.png
-------------RubyMultipartPost
Content-Disposition: form-data; name="uploaded_data"; filename="RackMultipart20190205-12268-1eli4dv"
Content-Length: 34441
Content-Type: image/png
Content-Transfer-Encoding: binary

‰PNG


 IHDR
awùé¨gP\ÆñÇèŒÎÌ_ý....

我正在尝试解析它,以便仅获取png 文件的内容并将其保存为实际的png 文件。

我首先制作了一个模拟 Rack env 并解析它

env = Rack::MockRequest.env_for(
        '/',
        'CONTENT_TYPE' => request.headers['Content-Type'],
        'CONTENT_LENGTH' => request.body.length,
        'rack.input' => StringIO.new(request.body.read),
    )
    parsed_message = Rack::Multipart.parse_multipart(env)

我知道parsed_message['uploaded_data'] 有第二部分,但我仍然不知道如何正确解析出包含Content-Disposition, Content-Length, Content-Type, Content-Transfer-Encoding 的 4 行并仅获取文件内容。

感谢任何想法!

【问题讨论】:

  • 您能发布您的控制器日志吗?
  • 我实际上意识到了我的错误。它看起来确实是实际文件数据之上的额外标题,但这只是在以ActionDispatch::Http::UploadedFile 格式发送时发生。所以,我只需要使用 params[:uploaded_data].tempfile 来获取文件:)
  • 在这种情况下,请回答您自己的问题并将其关闭:)

标签: ruby ruby-on-rails-3 file-upload controller multipartform-data


【解决方案1】:

我真的意识到了我的错误。它看起来确实是实际文件数据之上的额外标头,但这只是在以 ActionDispatch::Http::UploadedFile 格式发送时发生。所以,我只需要使用 params[:uploaded_data].tempfile 来获取文件:)

【讨论】:

    猜你喜欢
    • 2015-04-06
    • 2010-09-16
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    相关资源
    最近更新 更多