Is there a way to convert a string into ActionDispatch::Http::UploadedFile
I need it to be able to pass the file path in an API request to process the inserting of excel to a database as I want to do file upload using rest API rather than the browser.
Thank you
Just create a Tempfile instance and use it to initialize a ActionDispatch::Http::UploadedFile:
tempfile = Tempfile.new(file_name)
tempfile.binmode
# assumes you have a Base64 encoded string passed through JSON
tempfile.write(Base64.decode64(string))
tempfile.rewind
# for security reasons it is necessary to have real content type
content_type = `file --mime -b #{tempfile.path}`.split(';')[0]
ActionDispatch::Http::UploadedFile.new(
  tempfile: tempfile,
  type: content_Type,
  filename: 'original_file_name.xls'
)
It's not that well documented but the source code is really simple as ActionDispatch::Http::UploadedFile basically just wraps the tempfile with some metadata. All the hard work of actually pulling files out of the multipart request is done by Rack. See Sending files to a Rails JSON API for a complete controller example.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With