首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对虾PDF:如何添加用dragonfly上传的图片

对虾PDF:如何添加用dragonfly上传的图片
EN

Stack Overflow用户
提问于 2015-07-08 22:54:15
回答 1查看 451关注 0票数 0

我喜欢生成PDF文件,其中还包括由用户上传的图像。到目前为止,对虾gem还可以工作,还可以嵌入位于文件系统中的图像。我的问题是,我想包括用户上传的图像,这些图像的存储位置可能会在未来发生变化(从文件系统到一些云服务)。我使用dragonfly gem来处理图像,这使用了机架来访问图像,有时还会对它们进行动态处理。

现在最简单的想法不起作用了( report是我的对象,spot_image是我的图像字段)

代码语言:javascript
复制
image report.spot_image

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

我还尝试使用open-uri通过http打开该文件。这应该可以工作,但是它在我的开发机器上阻塞了,我想是因为开发rails服务器是单线程的:

代码语言:javascript
复制
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-request。我可以直接向dragonfly (或rack)要图像吗?对虾使用鸭子类型,需要一些响应readrewind的对象作为图像。

EN

回答 1

Stack Overflow用户

发布于 2015-07-17 23:38:10

我找到了有关dragonfly file handling的相关文档。以下方法不起作用:report.spot_image.data方法将图像数据作为字符串返回,但是对虾将数据识别为路径,而不是图像数据。dragonfly tempfile方法返回一个已关闭的临时文件,但对虾无法识别它是否可以打开该文件。

我成功地使用了file方法,它返回一个打开的文件句柄。目前还不清楚大虾是否会关闭此文件。所以我使用了块样式的方法来确保文件是关闭的:

代码语言:javascript
复制
   report.spot_image.file do |f|
       image f
   end

到目前为止,这是可行的。(尚未使用云存储进行测试)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31296315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档