1

由于我在我的 /assets 文件夹之外提供特定的 .SWF 文件的原因。这个想法是这样的:

def get_swf
    send_file("#{Rails.root}/app/assets_protected/game.swf", :disposition => "inline")
end

这使我可以在此方法中进行某些检查(用户登录等),并且不让这个 .SWF 成为我的 /assets 文件夹的一部分。

我在页面中使用 swfobject.js 加载此方法,但直接调用此 URL 只会提供 .SWF 文件作为下载文件。

  • 有没有人建议在直接调用 url 时阻止下载文件?
  • 有没有更好的方法来处理这个?

我对文件被下载并不满意,也许这可以解决。

4

2 回答 2

3

我认为这里有两个问题。第一个问题是您是否可以阻止直接下载某些内容,但仍将其加载到浏览器中。

这根本不可能。如果他们要查看 .swf,则它已经在他们的计算机上。它是浏览器缓存的一部分,因此您不能同时将其提供给用户并阻止他们直接获取它。

第二个问题是保护这个文件。我在这里看到了几个选项。

  • 仅允许某些受信任的用户访问该文件。(听起来你可能已经在做这样的事情了)

  • 让人们可以正常访问您的 .swf,但提取您担心的机密功能,并将其放入服务器端 Web 服务调用中。例如,如果您有一些基于某些变量计算用户分数的操作脚本,您将删除该函数,将其放在服务器端 Web 服务中,然后从您的操作脚本中调用它(我认为这是可能的,但我不是Flash 开发人员。)

  • 这只是一种缓解措施,但有一些工具可以混淆 swf 文件。这可能足以让您有信心让您的 SWF 进入野外。了解这不是万无一失的,并且可以进行逆向工程。示例 SWF 混淆器

于 2013-09-20T20:05:55.847 回答
2

您可能应该尝试使用send_data而不是send_file利用 Rails 的数据(视频)流功能。

您可能会在此讨论线程streaming-video-from-a-non-public-directoryrails-3中找到一些提示

于 2013-09-26T08:29:52.927 回答