在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--
答案 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ˇ·...)