Привет всем. Разбираюсь с апи S3.
Цель: есть сайт на вп, загружаемый контент должен храниться на s3, и файлы не должны отдаваться по прямым ссылкам и только при выполнении ряда условий. То есть при каждом клике на скачать должно все провериться, и потом уже отдается файл.
Первый мой вопрос относительно тупой - при загрузке файла я ставлю 'ACL' => 'private',
Но тогда вроде как нет способа без YOUR_ACCESS_KEY_ID и YOUR_SECRET_ACCESS_KEY стянуть файл? Да, я могу сделать одноразовые типа ссылки, но как закрыть прямые? (на всякий случай)
Да, смотрел это. Но это будет дороже c одноразовыми ссылками типа
if ($previousUrl) {
// Invalidate the previous URL by deleting the object
$s3->deleteObject([
'Bucket' => $bucket,
'Key' => $key,
]);
}
$cmd = $s3->getCommand('GetObject', [
'Bucket' => $bucket,
'Key' => $key,
]);
$url = $s3->createPresignedRequest($cmd, '+5 minutes')->getUri();
return $url;
The function then generates a new pre-signed URL as before and returns it to the caller. Because the previous URL has been invalidated by deleting the object, any attempts to use it will result in an error.
Note that this approach can also result in increased S3 API usage, as objects are deleted and recreated each time a file is downloaded. However, it may be a suitable approach in situations where you need to limit access to files to a single download per URL and ensure that the URL cannot be used again after the file has been downloaded.