Для моего проекта Ruby on Rails (Rails версии 5.1.2) я генерирую файлы изображений (png) и загружаю их в виде zip-файла, используя гем RubyZip.
Файлы изображений не хранятся ни в одном каталоге.У меня есть модель под названием Attachment.Каждое вложение имеет атрибут image_string, который является строкой base64 для изображения.Вы можете показывать изображения, используя тег типа image_tag(src = "data:image/jpeg;base64, #{attachment.image_string}", style: "border-radius: 0;")
. Для нескольких изображений я хочу создать временный файл для каждого из них, не сохраняя их в любом месте, и загрузить эти изображения в виде zip-файла.
Код, который у меня сейчас есть:
def bulk_download
require('zip')
::Zip::File.open("/tmp/mms.zip", Zip::File::CREATE) do |zipfile|
Attachment.all.each do |attachment|
image_file = Tempfile.new("#{attachment.created_at.in_time_zone}.png")
image_file.write(attachment.image_string)
zipfile.add("#{attachment.created_at.in_time_zone}.png", image_file.path)
end
end
send_file "/tmp/mms.zip", type: 'application/zip', disposition: 'attachment', filename: "my_archive.zip"
respond_to do |format |
format.all { head :ok, content_type: "text/html" }
end
end
Но в загруженном zip-файле нет файлов, а его размер составляет 0 байт.Заранее спасибо.