Просто создайте экземпляр Tempfile и используйте его для инициализации ActionDispatch::Http::UploadedFile
:
tempfile = Tempfile.new
tempfile.binmode
# assumes you have a Base64 encoded string passed through JSON
tempfile.write(Base64.decode64(string))
ActionDispatch::Http::UploadedFile.new(
tempfile: tempfile,
type: 'application/vnd.ms-excel',
filename: 'original_file_name.xls'
)
Это не так хорошо документировано, но исходный код действительно прост, как ActionDispatch :: Http :: UploadedFile в основном просто упаковывает временный файл с некоторыми метаданными. Всю тяжелую работу по извлечению файлов из многочастного запроса выполняет Rack. См. Отправка файлов в Rails JSON API для полного примера контроллера.