Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – 使用Send_File到远程源(Ruby on Rails)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的应用程序中,我有一个要求让我失望.

我有一个存储在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)

大佬总结

以上是大佬教程为你收集整理的ruby-on-rails – 使用Send_File到远程源(Ruby on Rails)全部内容,希望文章能够帮你解决ruby-on-rails – 使用Send_File到远程源(Ruby on Rails)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。