【问题标题】:Best way to display non-public images in a rails view在 Rails 视图中显示非公开图像的最佳方式
【发布时间】:2011-11-29 23:47:31
【问题描述】:

我试图找到在视图中呈现机密图像的最佳方法,而不是将图像存储在 rails 应用程序平面文件系统中,因为我不知道将图像放置在哪里。我将图像数据二进制存储为 :text 在 sqlite3 数据库表中,并使用

成功显示图像
<% s = "data:image/png;base64,#{ActiveSupport::Base64.encode64(@my_image)}"%>
<img style = 'width:100%; height:600px' src = '<%= s %>'/>

这适用于 Firefox 和 Chrome,但我的客户端无法显示图像。我会在一两个小时内找出他们使用的是什么浏览器。客户说他们希望图像 src url 看起来像控制器文件夹中的相对路径,这似乎与不将图像存储在平面文件系统中的概念相矛盾。

我想我在这里遗漏了一些非常小的东西,但我想知道在不向所有用户公开的应用程序中存储图像和文档的正确方法。如果我的问题不清楚或您需要信息,请告诉我,我会提供更多信息。

我已经阅读了附件_fu 和回形针,但它们似乎允许下载附件,我只需要在页面上显示内嵌图像。任何帮助是极大的赞赏。非常感谢您。

【问题讨论】:

标签: ruby-on-rails


【解决方案1】:

您可以将文件保存在非公共存储库中,并使用send_file(path, options = {}) 进行控制器操作。它允许您将文件存储在硬盘上的某个位置,并将访问逻辑保存在控制器中。

【讨论】:

  • 谢谢。我必须在特定视图中显示三个这样的图像。在我的控制器中使用内联 send_file 会呈现一个页面,该页面仅显示我提供给 send_file 的图像。如果我能以某种方式将文件发送到感兴趣的图像标签,这将是完美的。我会看看这是否可以做到。再次感谢您的帮助。
  • 你可以有一个单一的动作来响应像 /secret_image 这样的 URL 在控制器中你得到基于 params[:file] 值的文件,当你渲染你的视图时使用 &lt;img src="/secret_image?file=path_to_file" 但不要忘记转义此 URL 中的特殊字符
  • 这正是我想要的。非常感谢博丹!像魅力一样工作:)
【解决方案2】:

您尝试过paperclip gem 吗?您可以将图像上传到亚马逊,亚马逊允许您为文件设置权限……如果您想这样做的话。

【讨论】:

  • 谢谢。我会调查亚马逊。
【解决方案3】:

正如 Artem 所说,亚马逊是实现这一目标的好方法。但如果我说得对,他们希望直接查看图像的 URL(即,如果他们愿意,可以在地址字段中输入来源)。

您需要决定是每个人都应该能够访问图像(假设他们知道名称/路径),还是进行身份验证,在这种情况下,我认为相对路径没有任何价值。

难道你不能只有一个包含所有图像的图像文件夹(不能通过 URL 访问)和一个表格来查找 userX 是否可以看到 imageY?

【讨论】:

  • 谢谢。我最初使用这种方法,将图像放在文件系统上,但后来我们遇到了用户能够猜测他们不允许访问的图像位置的问题。我玩弄了让用户使用 ldap 登录系统的想法,并以通常的方式限制文件系统上的访问,但客户端不希望用户登录到他们的系统。今天早上晚些时候,当他们有空时,我将尝试与客户解决问题。再次感谢您的及时回复。
  • 啊,是的,我正在使用身份验证,并非所有用户都可以访问所有图像。
猜你喜欢
  • 2010-11-15
  • 1970-01-01
  • 2020-05-03
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多