S3图像链接不会在Chromecast上显示(Swift iOS包装中的Rails网络应用)

问题描述 投票:0回答:1

第一篇文章,但长期的用户(我的头发/理智在很多情况下已被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 ruby-on-rails swift amazon-s3 chromecast
1个回答
0
投票

我已经解决了自己的问题-事实证明,iOS包装程序有错误(具体来说,它需要同时提交一个无关的值,现在该值已得到补偿)。

从好的方面说,我的问题中的间接S3链接方法和直接S3链接方法都通过Casting起作用,因此希望它们对将来打算创建这些链接的类似位置的人有用。

© www.soinside.com 2019 - 2024. All rights reserved.