Я пытаюсь переместить изображения для своего сайта с моего хостинга на облачный хостинг 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𭼗, чтобы установить это, но затем я не понимаю, какая безопасность мне нужна для моих объектов. Казалось, что если бы я сделал их Private, они все равно не отображались бы, если бы я не использовал временную ссылку, как упоминалось ранее. Если бы я сделал их общедоступными, я мог бы перейти к ним напрямую, независимо от реферера.
Я далеко от того, что я пытаюсь сделать здесь? Это на самом деле не поддерживается S3, или я упускаю что-то простое? Я просмотрел документацию по SDK и много разыскивал, и чувствую, что это должно быть немного более четко задокументировано, так что, надеюсь, любой вклад здесь может помочь другим в этой ситуации. Я читал тех, кто называет файл уникальным идентификатором, создавая безопасность через неизвестность, но это не повлияет на мою ситуацию, и, вероятно, не лучшую практику для тех, кто пытается быть в безопасности.