PHP Amazon S3 доступ к личным файлам через URL

я использую AWS PHP SDK для сохранения изображений на S3. Файлы сохраняются в частном порядке. Затем я показываю миниатюры изображений, используя URL-адрес файла S3 в моем веб-приложении, но поскольку файлы являются закрытыми, изображения отображаются как поврежденные.

введите описание изображения здесь

Когда пользователь нажимает на имя файла, открывается модальное окно, чтобы показать файл в большем размере, но файл также отображается как поврежденный из-за той же проблемы.

введите описание изображения здесь

Теперь я знаю, что есть два способа заставить это работать. 1. Сделайте файлы общедоступными. 2. Создайте предварительно подписанные URL-адреса для файлов. Но я не могу пойти ни с одним из этих двух вариантов из-за требований моего проекта.

У меня вопрос, есть ли какой-нибудь третий способ решить эту проблему?

0

Решение

Я настоятельно рекомендую против этого, но вы можете создать скрипт на своем собственном сервере, который извлекает изображение через API, кэширует его и обслуживает. Затем вы можете ограничить доступ, как вам угодно, не публикуя изображения.

Пример прохождения скрипта:

$headers = get_headers($realpath); // Real path being where ever the file really is

foreach($headers as $header) {
header($header);
}
$filename = $version->getFilename();

// These lines if it's a download you want to do
// header('Content-Description: File Transfer');
// header("Content-Disposition: attachment; filename={$filename}");

$file = fopen($realpath, 'r');
fpassthru($file);
fclose($file);
exit;

Это едва ли «коснется сторон» и не должно слишком сильно задерживать появление ваших файлов, но все равно потребует некоторых ресурсов и пропускной способности.

2

Другие решения

Вам нужно будет получить доступ к файлам через скрипт на вашем сервере. Этот скрипт выполнит некоторую аутентификацию, чтобы убедиться, что запрос действителен, и вы хотите, чтобы они увидели файл. Затем загрузите файл с S3, используя действительный профиль IAM, который может получить доступ к закрытым файлам. Вывести файл

Вместо того, чтобы запрашивать файл у S3, запросите его у
http://www.yourdomain.com/fetchimages.php?key=8498439834

Тогда вот какой-то псевдокод в fetchimages.php

<?php

//if authorized to get this image

$key=$_GET['key'];
//validate key is the proper format

//get s3 url from a database based on the $key

//connect to s3 securely and read the file from s3

//output the file

?>
1

насколько я знаю, вы можете попытаться сделать ваш S3 Bucket «веб-сервером» как это но тогда вы, вероятно, «сделаете файлы общедоступными». Затем, если у вас есть какая-то логика для ограничения доступа, вы можете создать политика ведра

0
По вопросам рекламы [email protected]