Я пытаюсь перенести изображения для своего сайта с моего хоста на облачный хостинг Amazon S3. Эти изображения являются клиентскими рабочими сайтами и не могут быть общедоступными. Я бы хотел, чтобы они отображались на моем сайте, предпочтительно, используя PHP SDK, доступный из Amazon.
До сих пор мне удалось преобразовать script, чтобы я просматривал записи в своей базе данных, хватал путь к файлу, правильно назвал его и отправлял в 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 />
Используя этот метод, как будет работать мое кеширование? Я предполагаю, что каждый раз, когда я обновляю страницу или изменяю одну из своих записей, я снова буду тянуть это изображение, увеличивая мои запросы на получение.
Я также рассмотрел использование политик bucket, чтобы разрешить поиск изображений у определенных источников. Правильно ли я понимаю, что Amazon должен получать только запросы со страниц или доменов, которые я указываю?
Я ссылался: https://forums.aws.amazon.com/thread.jspa?messageID=188183𭼗, чтобы установить это, но тогда я запутался в отношении какой мне безопасности на моих объектах. Похоже, если бы я сделал их частными, они все равно не отобразились бы, если бы я не использовал ссылку temp, как упоминалось ранее. Если бы я сделал их общедоступными, я мог бы перейти к ним напрямую, независимо от источника.
Неужели я отсюда то, что я пытаюсь сделать здесь? Разве это не поддерживается S3, или я пропустил что-то простое? Я прошел через SDK-документацию, и многие поиски и такие чувства должны быть более четко документированы, поэтому, надеюсь, любой вклад здесь может помочь другим в этой ситуации. Я читал других, которые называют файл уникальным идентификатором, создавая защиту через неизвестность, но это не сократит его в моей ситуации и, вероятно, не рекомендуется для тех, кто пытается быть в безопасности.