Я пытаюсь переместить изображения для своего сайта с моего хоста на облачный хостинг Amazon S3. Эти изображения относятся к рабочим сайтам клиентов и не могут быть общедоступными. Я хотел бы, чтобы они отображались на моем сайте предпочтительно с помощью PHP SDK, доступного на Amazon.
До сих пор я мог написать сценарий для преобразования, чтобы я искал записи в своей базе данных, брал путь к файлу, называл его соответствующим образом и отправлял в Amazon.
//upload to s3
$s3->create_object($bucket, $folder.$file_name_new, array(
'fileUpload' => $file_temp,
'acl' => AmazonS3::ACL_PRIVATE, //access denied, grantee only own
//'acl' => AmazonS3::ACL_PUBLIC, //image displayed
//'acl' => AmazonS3::ACL_OPEN, //image displayed, grantee everyone has open permission
//'acl' => AmazonS3::ACL_AUTH_READ, //image not displayed, grantee auth users has open permissions
//'acl' => AmazonS3::ACL_OWNER_READ, //image not displayed, grantee only ryan
//'acl' => AmazonS3::ACL_OWNER_FULL_CONTROL, //image not displayed, grantee only ryan
'storage' => AmazonS3::STORAGE_REDUCED
)
);
Прежде чем все скопировать, я создал простую форму для тестовой загрузки и отображения изображения. Если я загружаю изображение с помощью ACL_PRIVATE, я могу либо получить общедоступный URL-адрес, и у меня не будет доступа, либо я могу получить общедоступный URL-адрес с временным ключом и отобразить изображение.
<?php
//display the image link
$temp_link = $s3->get_object_url($bucket, $folder.$file_name_new, '1 minute');
?>
<a href='<?php echo $temp_link; ?>'><?php echo $temp_link; ?></a><br />
<img src='<?php echo $temp_link; ?>' alt='finding image' /><br />
Как будет работать кэширование при использовании этого метода? Я предполагаю, что каждый раз, когда я обновляю страницу или изменяю одну из своих записей, я буду снова извлекать это изображение, увеличивая количество запросов на получение.
Я также рассматривал возможность использования политик сегментов, чтобы разрешить извлечение изображений только с определенных рефереров. Правильно ли я понимаю, что Amazon должен получать запросы только со страниц или доменов, которые я укажу?
Я сослался на: https://forums.aws.amazon.com/thread.jspa?messageID=188183𭼗, чтобы настроить это, но затем не понимаю, какая безопасность мне нужна для моих объектов. Казалось, что если бы я сделал их приватными, они все равно не отображались бы, если бы я не использовал временную ссылку, как упоминалось ранее. Если бы я сделал их общедоступными, я мог бы перейти к ним напрямую, независимо от реферера.
Я далеко от того, что я пытаюсь сделать здесь? Это действительно не поддерживается S3, или я упускаю что-то простое? Я просмотрел документацию SDK и много искал, и чувствую, что это должно быть немного более четко задокументировано, поэтому, надеюсь, любой вклад здесь может помочь другим в этой ситуации. Я читал других, которые называют файл уникальным идентификатором, создавая безопасность за счет неясности, но это не поможет в моей ситуации и, вероятно, не лучшая практика для тех, кто пытается быть в безопасности.