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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |