如何使用Carrierwave动态生成上传到S3的文件的下载链接?

时间:2013-05-03 23:17:34

标签: ruby-on-rails ruby-on-rails-3 amazon-s3 carrierwave fog

我有2个模型,我希望CarrierWave与之互动。 ItemImage模型。

我想要发生的是,一旦用户通过Carrierwave将他们的项目上传到S3 - 这部分非常简单 - 每当另一个用户想要下载该项目时,他们按下一个触发某种动态生成下载链接的方法的按钮 - 满足2个条件时到期。该项目下载X次,或X小时已经过去(比如24小时)。

这个想法是互联网上没有静态下载链接到该文件。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

CarrierWave允许您为每个上传器(通过初始化程序)或特定上传器设置fog_publicfog_authenticated_url_expiration选项。在后一种情况下,您只需将self.fog_public = falseself.fog_authenticated_url_expiration = 123放在上传器类定义中。设置了这两个选项后,对model.uploader.url的任何调用都将返回一个特殊构建的URL,该URL将在设定的时间后过期。

答案 1 :(得分:0)

我很确定你只能限制s3图像上的时间。你不能限制下载次数。

http://docs.aws.amazon.com/AmazonS3/latest/dev/S3_QSAuth.html谈了一些。如果你使用https生成,那么很难嗅到你可能会安全。您可以将自己的前端构建到s3,但之后您必须跟踪URL,计算下载量并自行停止。我对此很认真。字节不是那么贵(恕我直言)