первое сообщение, но давний пользователь (мои волосы / здравомыслие неоднократно сохранялись SO).
Я изо всех сил пытаюсь получить изображения, размещенные на S3, для показа в Chromecast.
У меня есть веб-приложение Rails, которое отправляет ссылку на изображение через веб-сокеты (Action Cable) в приложение-оболочку iOS (в Swift), которое, в свою очередь, отправляет ссылку на подключенный приемник Chromecast по умолчанию для отображения изображения на экране. Этот запутанный маршрут необходим из-за моего варианта использования и Cast SDK.
Это прекрасно работает, и Chromecast правильно отображает изображения, отправленные из самого веб-приложения (то есть относительные пути к изображениям, размещенным на Heroku), а также как прямые ссылки (например, это опубликованное c изображение самолета . Однако, оно не будет отображать изображения, которые я размещал на AWS S3.
В Cast SDK не отображаются какие-либо проблемы с форматами изображений (jpg, png) или ссылками, которые могут иметь отношение к проблеме, поэтому проблема, по-видимому, связана со ссылкой S3, а не с самим приведением.
Я использую Active Storage для подключения моего приложения rails к S3 и url_for(artwork.image)
для отображения правильного изображения внутри приложения.
Я также создаю полную ссылку для моего Javascript интерфейса в соответствии с замечательным Rails Guide
*my_channel.rb*
indirect_link = Rails.application.routes.url_helpers.rails_blob_path(artwork.image, only_path: true)
Эта косвенная ссылка маршрутизирует через веб-приложение и затем на 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)
Это работало в приложении, а также из любой браузер, таким образом, казался максимально доступным c. Но снова Cast не смог отобразить его.
Затем я попытался отредактировать CORS для корзины S3, следуя указаниям AWS 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 publi c, а также сделать отдельное изображение publi c, но ни одна из них не работала (и в любом случае созданная выше прямая ссылка со знаком уже опубликована c и доступна из любого браузера).
У меня есть доступ к коду iOS (в Swift), в которой подробно описана настройка Cast et c, но я не знаю Swift и, к сожалению, не могу получить доступ к сообщениям об ошибках. Поэтому я не могу использовать отладчик . Поскольку он успешно работает для других ссылок publi c, я думаю, что проблема, скорее всего, связана со ссылкой S3 (хотя это предположение может быть неправильным) или с типами ссылок, которые разрешает Cast.
I ' Мы потратили несколько дней на это, и у меня нет идей на данный момент, поэтому любая помощь будет принята с благодарностью!
Спасибо!