使用Fog / Carrierwave将音频从AWS流式传输到Rails应用程序

时间:2014-10-14 02:27:08

标签: ruby-on-rails amazon-web-services carrierwave fog

我有一个Rails应用程序,允许用户将mp3上传到他们的个人资料模型,然后将其与AWS S3一起存储。我试图弄清楚如何通过Fog建立连接并在点击时播放他们的歌曲,类似于SoundcloudBandcamp的功能。我一直在看着雾文档和类似的帖子,但我被卡住了。我想我必须使用send_file,但我不确定。任何信息,将不胜感激。我打算使用jplayer或类似的东西来实际播放音频,只需要在点击时进行连接。

更新

我目前正在尝试在我的个人资料控制器中实现此功能,请参阅此文档http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/Bucket.html

 bucket = s3.buckets.create('name', :grants => {
  :grant_read => [
    { :uri => "http://acs.amazonaws.com/groups/global/AllUsers" },
  ],
  :grant_full_control => [
    { :id => 'abc...mno' }               # cannonical user id
    { :email_address => 'foo@bar.com' }, # email address
  ]
})

在我看来,我有以下内容,所以我有一些东西要看,并与之合作。

 <audio id="song" class="audio_player" controls="false" preload="true">
   <source src="/audios/ignite.mp3" type="audio/mpeg">
 </audio>

所以这里有一个脱节,有点像我在黑暗中拍摄。我认为一点点清晰度会让我走上正轨。我也没有成功让Fog在我的控制台中工作,这对事情有帮助,但是它是一个单独的线程。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我怀疑你实际上并不想通过服务器传输音频。将source属性直接指向s3可能会更好。你有几个选择。首先,由于您似乎将其设置为公共可读性,您可以直接链接到URL(我相信carrierwave有方法为您提供此URL)。你也可以在没有使用签名/过期网址的公开阅读的情况下做到这一点,但这有点复杂。

所有这一切,如果它似乎来自您的服务器(而不是S3)非常重要,您可能希望设置一个CNAME到S3,以便它仍然从那里提供,但似乎来自您的主机(或类似)的子域。希望有助于指出你正确的方向,但让我知道,我可以尝试进一步增加特异性。谢谢!