加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 使用Send_File到远程源(Ruby on Rails)

发布时间:2020-12-16 21:43:22 所属栏目:百科 来源:网络整理
导读:在我的应用程序中,我有一个要求让我失望. 我有一个存储在S3中的文件,当用户点击我的应用程序中的链接时,我登录了他们点击链接的数据库,然后将他们的“下载信用额”减去一个,然后我想提示文件下载. 我不想将用户重定向到文件,因为它存储在S3中,我不希望他们拥
在我的应用程序中,我有一个要求让我失望.

我有一个存储在S3中的文件,当用户点击我的应用程序中的链接时,我登录了他们点击链接的数据库,然后将他们的“下载信用额”减去一个,然后我想提示文件下载.

我不想将用户重定向到文件,因为它存储在S3中,我不希望他们拥有源文件的链接(以便我可以保持完整性和访问权限)

看起来send_file()不会使用远程源文件,任何人都推荐一个gem或适合的代码,这样做?

解决方法

在S3桶/对象读取文件时,您需要将文件内容流传输给用户.

如果您使用AWS::S3图书馆这样可能会工作:

send_file_headers!( :length=>S3Object.about(<s3 object>,<s3 bucket>)["content-length"],:filename=><the filename> )
 render :status => 200,:text => Proc.new { |response,output|
   S3Object.stream(<s3 object>,<s3 bucket>) do |chunk|
     output.write chunk
   end
 }

这个代码大多是从send_file代码复制的,它本身只能用于本地文件或类似文件的对象

注:我无论如何建议不要从rails进程本身提供文件.如果可能/可以接受您的用例,我将使用经过身份验证的GET来从桶中提供私有数据.

使用经过身份验证的GET,您可以将存储桶及其对象保留为私有,同时允许临时许可通过制作包含身份验证签名令牌的URL来读取特定对象内容.用户只需重定向到经过身份验证的URL,令牌只能在几分钟内生效.

使用上述AWS :: S3,您可以通过以下方式获取经过身份验证的GET URL:

time_of_exipry = Time.now + 2.minutes
 S3Object.url_for(<s3 object>,<s3 bucket>,:expires => time_of_exipry)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读