我有 2 个模型希望 CarrierWave 与之交互。Item
和Image
模型。
我想要发生的是一旦用户通过 Carrierwave 将他们的项目上传到 S3 - 这部分非常简单 - 每当另一个用户想要下载该项目时,他们按下一个按钮,该按钮触发一些动态生成下载链接的方法 - 过期当满足 2 个条件时。该项目已下载 X 次,或者已过去 X 小时(例如 24 小时)。
这个想法是互联网上没有指向该文件的静态下载链接。
我怎么做?
我有 2 个模型希望 CarrierWave 与之交互。Item
和Image
模型。
我想要发生的是一旦用户通过 Carrierwave 将他们的项目上传到 S3 - 这部分非常简单 - 每当另一个用户想要下载该项目时,他们按下一个按钮,该按钮触发一些动态生成下载链接的方法 - 过期当满足 2 个条件时。该项目已下载 X 次,或者已过去 X 小时(例如 24 小时)。
这个想法是互联网上没有指向该文件的静态下载链接。
我怎么做?
CarrierWave 允许您为每个上传者(通过初始化程序)或特定上传者设置fog_public
和选项。fog_authenticated_url_expiration
在后一种情况下,您只需将上传器类定义放在self.fog_public = false
其中。self.fog_authenticated_url_expiration = 123
设置这两个选项后,任何调用都model.uploader.url
将返回一个专门构建的 URL,该 URL 将在设置的时间后过期。
我很确定您只能限制 s3 图像的时间量。您不能限制下载次数。
http://docs.aws.amazon.com/AmazonS3/latest/dev/S3_QSAuth.html谈到了一些。如果您使用 https 生成,那么将很难嗅探,并且您可能会很安全。您可以构建自己的 s3 前端,但随后您必须跟踪 URL、计算下载量并自行停止。我会认真考虑的。字节并不昂贵(恕我直言)