在Carrierwave中如何让用户只下载一次s3文件?

时间:2014-12-11 07:52:22

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

假设我在Rails应用程序中使用Carrierwave将文件上传到S3。我需要确定:

  • 隐藏文件(要隐藏的实际网址)
  • 让用户从临时生成的URL下载文件,该URL只允许下载1次。如果我们重新键入该URL,则不会让用户下载文件

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

你需要自己编写代码。您需要跟踪下载文件的记录。

为此,您需要创建一个表,其中包含已下载的用户和文件的信息。

要隐藏实际的s3网址,您需要先从s3中读取代码中的文件,然后将该文件提供给send_data的用户。

xyz = Xyz.find(params[:id])
data = open(xyz_file_path).read
send_file data, filename: file_name_that_you_want, 
  type: file_content_type, stream: 'true', 
  :x_sendfile => true