Rack File
The rack_file
plugin enables uploaders to accept Rack uploaded
file hashes for uploading.
plugin :rack_file
Usage
When a file is uploaded to your Rack application using the
multipart/form-data
parameter encoding, Rack converts the uploaded file to a
hash.
file_hash #=> # { # :name => "file", # :filename => "cats.png", # :type => "image/png", # :tempfile => #<Tempfile:/var/folders/3n/3asd/-Tmp-/RackMultipart201-1476-nfw2-0>, # :head => "Content-Disposition: form-data; ...", # }
Since Shrine only accepts IO objects, you would normally need to fetch the
:tempfile
object and pass it directly. This plugin enables the attacher to
accept the Rack uploaded file hash directly, which is convenient when doing
mass attribute assignment.
user.avatar = file_hash# or attacher.assign(file_hash)
API
Internally the Rack uploaded file hash will be converted into an IO object
using Shrine.rack_file
, which you can also use directly:
# or YourUploader.rack_file(file_hash) io = Shrine.rack_file(file_hash)io.original_filename #=> "cats.png" io.content_type #=> "image/png" io.size #=> 58342
Note that this plugin is not needed in Rails applications, as Rails already
wraps the Rack uploaded file hash into an ActionDispatch::Http::UploadedFile
object.