【问题标题】:In Carrierwave how to let a user download an s3 file only once?在 Carrierwave 中如何让用户只下载一次 s3 文件?
【发布时间】:2014-12-11 16:22:13
【问题描述】:

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

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

我怎样才能做到这一点?

【问题讨论】:

  • 你的意思是用户在第一次之后根本就不能下载文件,还是只是不能通过同一个 url?
  • 不通过同一个网址
  • 您是否考虑过此处讨论的经过身份验证的 url 的过期时间很短? groups.google.com/forum/#!topic/carrierwave/L3J8d4ZKySM 不是你要求的,但可能就足够了吗?

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


【解决方案1】:

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

为此,您需要创建一个表来保存已下载的用户和文件的信息。

要隐藏实际的 s3 url,您需要先从 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 2012-09-24
    • 2018-05-09
    • 2012-07-28
    相关资源
    最近更新 更多