1

在 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--
4

1 回答 1

-1

您将在参数中找到文件对象 - 在您的情况下位于params[:file].

散列中的对象params是 的子类的一个实例IO。根据上传文件的大小,它可能是(临时文件)的一个StringIO或一个实例。File

在这两种情况下,对象都将具有一个original_filename属性,该属性包含它在用户计算机上的文件名称,以及一个content_type包含上载文件的 MIME 类型的属性。

要读取文件内容,只需调用read.

uploaded_file = params[:file]

uploaded_file.original_filename 
#=> test.jpg

uploaded_file.read 
#=> file content ("ˇÿˇ‡JFIFHHˇ...")

在 Rails 指南中阅读有关上传文件的更多信息。

于 2013-10-13T21:46:28.617 回答