Ruby on rails 如何使用RubyonRails/Coffeescript测试S3预签名的GET url以查看它是否已过期,如果已过期,如何重新生成它

Ruby on rails 如何使用RubyonRails/Coffeescript测试S3预签名的GET url以查看它是否已过期,如果已过期,如何重新生成它,ruby-on-rails,amazon-web-services,amazon-s3,coffeescript,carrierwave,Ruby On Rails,Amazon Web Services,Amazon S3,Coffeescript,Carrierwave,我正在用RubyonRails构建一个文档管理系统,它使用AmazonS3进行存储。我正在使用carrierwave和carrierwave aws gems上传/下载文件 我可以生成一个预先签名的url,该url在一段时间后过期(越快越好…可能10秒-1分钟),但我遇到的问题是,如果有人加载页面,但没有立即单击“下载”按钮,那么链接过期,他们会被指向一个丑陋的XML错误 我想弄清楚的是: 当点击下载按钮(我想用Coffeescript)或 继续并在页面加载时生成预签名的url,但是当单击下载时

我正在用RubyonRails构建一个文档管理系统,它使用AmazonS3进行存储。我正在使用carrierwave和carrierwave aws gems上传/下载文件

我可以生成一个预先签名的url,该url在一段时间后过期(越快越好…可能10秒-1分钟),但我遇到的问题是,如果有人加载页面,但没有立即单击“下载”按钮,那么链接过期,他们会被指向一个丑陋的XML错误

我想弄清楚的是:

  • 当点击下载按钮(我想用Coffeescript)或

  • 继续并在页面加载时生成预签名的url,但是当单击下载时,以某种方式检查它是否返回错误,如果返回错误,则获取一个新的预签名url并在此时重定向到它。(如果可能的话,再考虑一下咖啡脚本)


  • 在过去,我对类似的问题采取了以下完全服务器端的方法(不使用载波,但不应该相关)

    让下载按钮链接到应用程序中的控制器/操作,传递文档id。然后,控制器操作生成一个预先签名的URL,然后将用户重定向到该URL

    理论上,在这样一个预先指定的URL上,您只需要很短的生存期,尽管如果文件足够大,用户可能希望暂停并恢复传输,那么更长的生存期可能是可取的