laravel s3 получает изображение из API, отображающее неизвестный SRC при попытке замаскировать URL - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть безголовая CMS, которая обслуживает местоположение образа для S3 частного сегмента. Я могу получить доступ к URL-адресу изображения, как сейчас, используя пользовательскую функцию, которая берет каждое изображение, переданное в представление, и захватывает его через S3 с помощью библиотеки Laravel S3.

return Storage::cloud()->url($newLink[1]); // This currently works

Однако сейчас я хочу скрыть полный URL-адрес возвращаемого изображения из шаблона представления. Из моего понимания я должен использовать функцию get. Затем переписать новый URL.

return Storage::cloud()->get($newLink[1]);

Однако, на мой взгляд, теперь изображение html отображается как неизвестное. После некоторых исследований я обнаружил, что модуль Laravel для файлового хранилища не обрабатывает необработанные данные для изображений. Кроме того, у меня есть некоторая сложность, поскольку я не хочу, чтобы мои объекты корзины были публичными.

<img src=(unknown) alt=''/>

update

Я исправил вышеуказанную проблему, кодировав необработанные данные из запроса на получение Storage внутри моего контроллера и расшифровав его, передав строку возвратаи инструкции по декодированию в тег img.

$base64 = base64_encode(Storage::cloud()->get($newLink[1]));
return "data:image/png;base64,".$base64;

После некоторых исследований я обнаружил, что модуль Laravel для хранилища файлов по умолчанию не обрабатывает необработанные данные для изображений. То, чего я хочу достичь, это изображение с SEO-дружественной URL-ссылкой. Я думаю, что мне нужно использовать что-то вроде https://aws.amazon.com/blogs/security/how-to-use-bucket-policies-and-apply-defense-in-depth-to-help-secure-your-amazon-s3-data/. Любая помощь или точка в правильном направлении очень ценится.

//expected final outcome     
<img src='/image/my-image.jpg' alt=''/>

1 Ответ

0 голосов
/ 08 ноября 2019

После еще одного исследования у меня было два варианта. В конечном итоге я хотел обеспечить безопасный доступ к корзине через безголовую архитектуру, в то же время поддерживая дружественный для SEO контекст и дружественные ресурсы для социальных сетей.

1-я написать функцию для локальной загрузки изображений на веб-сервер, который вызывал S3-bucket,Это имело преимущество репликации ресурсов для дополнительной безопасности (при условии, что файловая структура была неизменной), если кто-то на стороне CMS случайно удалил изображения и был недоступен для повторной загрузки. Однако недостатком будут реплицированные данные и стоимость, которые, вероятно, должны управляться репликацией S3.

2-й вариант, который я выбрал, заключается в настройке облачного фронта с моим S3-bucket с настраиваемым поддоменом и SSL. После прочтения этой статьи о SEO для ресурсов в том же домене ЗДЕСЬ с поддоменом, указывающим на мое ведро, мне не нужно было использовать пакет хранения Laravels для получения изображений, поскольку на них можно было ссылаться напрямую.

Для 3 Bucket я применил анонимную политику получения, чтобы позволить любому связывать изображения для дружественных ссылок.

{
    "Version": "2008-10-17",
    "Id": "AnonymousGetImages",
    "Statement": [
        {
            "Sid": "Allow-Public-Access-To-Bucket",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::*mybucket*/*"
        }
    ]
}

Если у кого-то есть другой подход к этому, я бы оценил ввод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...