То, что вы делаете, будет работать, и это, вероятно, лучший вариант, если вы оптимизируете для того, чтобы что-то работало быстро, не слишком беспокоясь о трате ресурсов сервера, ненужных вычислениях и если у вас нет проблем с масштабируемостью .
Однако, если вы беспокоитесь о масштабируемости и меньшей задержке, а также о безопасном доступе к этим ресурсам изображения, вы можете улучшить свою текущую архитектуру.
Once I получить пути, я использую это, чтобы сначала загрузить все изображения на мой сервер, а затем отправить их клиенту.
Эта часть - первая часть, от которой я бы попытался избавиться, поскольку вы этого не делаете действительно нужен ваш бэкэнд для загрузки этих изображений и их потоковой передачи. Тем не менее, по-прежнему необходимо контролировать доступ к ресурсам в зависимости от того, кому они принадлежат. Я бы подумал о том, чтобы переключить это на настройку ниже, чтобы уменьшить задержку и потратить меньше ресурсов сервера, чтобы выполнить эту работу:
- Как только я получу пути в вашей серверной службе, сгенерируйте предварительно подписанные URL-адреса для объектов s3, которые предоставят вашему клиенту временный доступ к этим ресурсам (в зависимости от ваших потребностей вы можете настроить временные рамки того, как долго вы хотите, чтобы URL-доступ работал).
- Затем отправьте эти ссылки на ваш клиент, чтобы он мог напрямую передавать URL-адреса из S3, вместо того, чтобы ваш сервер стал для этого посредником.
После того, как эта настройка заработает, я бы попытался рассмотреть возможность использования Amazon CloudFront для улучшения доступа к вашим объектам с помощью возможностей CDN, которые предоставляет CloudFront, особенно если ваши клиенты находятся в разных географических регионах. AFA Я вижу, вы также можете заставить CloudFront работать с заранее заданными URL-адресами .
Это правильный способ сделать это? Кажется, что если клиент обращается к S3 напрямую, это будет быстрее, но я не уверен, безопасно ли это
Предписанные URL-адреса - это ваш способ смягчить неконтролируемый доступ к вашим объектам S3. Однако вам, вероятно, нужно беспокоиться о крайних случаях (например, как клиенты должны действовать, когда их доступ к объекту S3 истек, чтобы пользователи этого не заметили, et c.). Все это затраты на создание чего-то масштабируемого, если у вас есть проблемы с масштабируемостью.