在Ruby on Rails中,如何在没有元数据的情况下获取请求有效负载

时间:2013-10-13 21:08:34

标签: ruby-on-rails ruby post request

在Ruby on Rails中,我让用户上传文件。我做了一些事情,然后想用obj = bucket.objects [filename] .write(request.body.read)将其传递给Amazon S3

我认为我可以使用request.body.read或request.raw_post,但是有效负载中包含所有这些元数据,例如Content-Disposition和Content-Type。我怎样才能获得与用户上传完全相同的有效负载部分?

例如,这是request.body.read,但我只想要从“ÿ‡JFIF ...”开始的部分

------WebKitFormBoundaryWc3LdZGmhHmhJeuT
Content-Disposition: form-data; name="file"; filename="test.jpg"
Content-Type: image/jpeg

ˇÿˇ‡JFIFHHˇ·...
...more data...
------WebKitFormBoundaryWc3LdZGmhHmhJeuT--

1 个答案:

答案 0 :(得分:-1)

您会在密钥:file下找到文件对象参数 - params[:file]

params散列中的对象是IO的子类的实例。根据上载文件的大小,它实际上可能是StringIO或由临时文件支持的File实例。在这两种情况下,对象都将具有original_filename属性,其中包含文件在用户计算机上的名称以及包含上载文件的MIME类型的content_type属性。

只需阅读文件内容电话read

uploaded_file = params[:file]
uploaded_file.original_filename #=> returns in your example 'test.jpg'
uploaded_file.read #=> returns the content of the file (ˇÿˇ‡JFIFHHˇ·...)

详细了解uploading files in the Rails Guides