第一篇文章,但长期的用户(我的头发/理智在很多情况下已被SO保存。]
我正在努力让图像托管在S3上以在Chromecast上显示。
我有一个Rails网络应用程序,它通过websockets(动作电缆)将图像链接发送到iOS包装器应用程序(在Swift中),该应用程序又将该链接发送到连接的默认Chromecast接收器以在屏幕上显示图像。由于我的用例和Cast SDK,这种复杂的路由是必需的。
这非常有效,Chromecast可以正确显示从网络应用本身发送的图像(即,相对路径链接到Heroku上托管的图像),以及直接链接(例如此公共image of a plane。但是,它不会显示我在AWS S3上托管的图像。
Cast SDK不会显示与图像格式(jpg,png)或链接相关的任何问题,因此,问题可能出在S3链接上,而不是演员本身。
我使用Active Storage将Rails应用程序连接到S3,并使用url_for(artwork.image)
在应用程序中显示正确的图像。
我也根据精彩的Rails Guide为我的Javascript前端生成了完整链接,>
*my_channel.rb* indirect_link = Rails.application.routes.url_helpers.rails_blob_path(artwork.image, only_path: true)
出于安全原因,此间接链接通过Web应用程序路由,然后到达S3。这对我的javascript页面更新有效,但是Cast无法显示此链接。
我发现它不喜欢重定向,所以我经过反复尝试后使用S3 docs生成了完整的带符号的直接链接,>
s3 = Aws::S3::Resource.new(region: 'eu-west-2') obj = s3.bucket(‘bucket name’).object(‘key’) direct_url = obj.presigned_url(:get, expires_in: 3600)
这既可以在应用中使用,也可以在任何浏览器中使用,因此似乎尽可能公开。但是演员表再次无法显示它。
然后,我按照AWS S3 CORS指南尝试编辑S3存储桶的CORS。我尝试了这两个选项,但都没有用。
<CORSRule> <AllowedOrigin>*</AllowedOrigin> <AllowedMethod>GET</AllowedMethod> <AllowedMethod>HEAD</AllowedMethod> <ExposeHeader>ETag</ExposeHeader> <AllowedHeader>*</AllowedHeader> </CORSRule> <CORSRule> <AllowedOrigin>*</AllowedOrigin> <AllowedMethod>GET</AllowedMethod> </CORSRule>
[我还尝试将我的S3存储桶完全设为public,还公开了单个图片,但是都没有用(无论如何,生成的已签名直接链接上面的信息已经公开,可以通过任何浏览器访问。
我可以访问iOS代码(在Swift中),其中详细说明了Cast设置等,但我不了解Swift,很遗憾,无法访问任何错误消息。因此,我无法使用debugger。由于它可以成功地用于其他公共链接,因此我认为问题很可能与S3链接有关(尽管这种假设可能是错误的)或Cast允许的链接类型。
我已经花了很多天了,目前我没有想法,所以任何帮助将不胜感激!
谢谢!
第一篇文章,但长期的用户(我的头发/理智在许多情况下已被SO保存)。我正在努力让图像托管在S3上以在Chromecast上显示。我有一个发送图像的Rails Web应用程序...
我已经解决了自己的问题-事实证明,iOS包装程序有错误(具体来说,它需要同时提交一个无关的值,现在该值已得到补偿)。
从好的方面说,我的问题中的间接S3链接方法和直接S3链接方法都通过Casting起作用,因此希望它们对将来打算创建这些链接的类似位置的人有用。