我正在尝试找到在视图中呈现机密图像的最佳方法,而不将图像存储在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看起来像控制器文件夹中的相对路径,这似乎与不在平面文件系统中存储图像的概念相矛盾。
我想我在这里缺少一些非常小的东西,但我想知道在一个不向所有用户公开的应用程序中存储图像和文档的正确方法。如果我的问题不明确或您需要信息,请告诉我,我会提供更多信息。
我已阅读attachment_fu和paperclip,但它们似乎允许附件下载,我只需要在页面上内嵌显示图像。任何帮助是极大的赞赏。非常感谢你。
答案 0 :(得分:3)
您可以将文件保存在非公共存储库中,并让控制器对send_file(path, options = {})执行操作。它允许您将文件存储在硬盘上的某个位置,并将访问逻辑保留在控制器中。
答案 1 :(得分:1)
您是否尝试过paperclip
宝石?您可以将图像上传到亚马逊,亚马逊允许您设置文件权限...如果您想这样做。
答案 2 :(得分:1)
正如Artem所说,亚马逊是实现这一目标的好方法。但是,如果我找对你,他们希望直接看到图像的URL(即,如果他们愿意,可以将源输入到地址字段中。)
你需要决定每个人都应该能够访问图像(假设他们知道名称/路径),或者要进行身份验证,在这种情况下我不认为相对路径是值得的。
你不能只拥有一个包含所有图像(不能通过URL访问)的图像文件夹,还有一个要查找的表,用户X是否可以看到imageY?