2015-07-08 4 views
0

Мне нравится создавать PDF-файлы, которые также включают изображения, загруженные пользователем. Креветка драгоценных камней работает до сих пор и может также вставлять изображения, расположенные в файловой системе. Моя проблема заключается в том, что я хочу включать загруженные пользователем изображения и где эти изображения будут храниться, вероятно, изменится в будущем (от файловой системы до некоторой облачной службы). Я использую драгоценный камень стрекозы для обработки изображений, это использует стойку для доступа к изображениям и иногда обрабатывает их на лету.Prawn PDF: как добавить изображения, загруженные с помощью dragonfly

Теперь Простейшая идея не работает (с report быть моим объектом и spot_image поля моего изображения)

image report.spot_image 

no implicit conversion of #<Class:0x007fc07ecf1110> into String 

Я пытался также открыть файл через HTTP с открытой Uri. Это должно работать, но это блоки на моей машине развития, я думаю, потому что сервер рельсы развития однопоточно:

image_path = report.spot_image.remote_url 
image_url = "#{view.request.protocol}\#view.request.host_with_port} 
      /#{image_path.sub(/^\//,"")}" 

image open(image_url) # timeout in development-mode 

Это, вероятно, может работать в производстве, но даже тогда он делает ненужную HTTP-запрос. Могу ли я спросить стрекоза (или стойка) непосредственно для изображения? prawn использует утиную печать и нуждается в некотором объекте, который отвечает за read и rewind как изображение.

+0

'Возможно, он работает в производстве, но даже тогда он делает ненужный http-запрос' - что вы подразумеваете под ненужным? Если его удаленное изображение, чем какой-либо компонент, должно будет выполнить HTTP-запрос, чтобы извлечь его для вставки –

ответ

0

Я нашел соответствующую документацию по теме dragonfly file handling. Следующие не работали: Метод report.spot_image.data возвращает данные изображения как строку, но креветка распознает данные как путь, а не как данные изображения. Метод dragonfly tempfile возвращает закрытый временный файл, но креветка не признает, что он может ее открыть.

У меня был успех с помощью метода file, который возвращает дескриптор открытого файла. Неясно, закрывает ли креветка этот файл, чем. Поэтому я использовал метод блочного стиля, чтобы убедиться, что файл закрыт:

report.spot_image.file do |f| 
     image f 
    end 

Это работает до сих пор. (еще не проверен с облачным хранилищем)

 Смежные вопросы

  • Нет связанных вопросов^_^