Загрузите файл из Amazon S3 на локальный компьютер, не сообщая пользователю об источнике файла в коде-наполнителе Stack Overflow

1) Ниже приведен мой код для загрузки личного файла из Amazon S3 в codeigniter, $ this-> S3 содержит информацию о моем клиенте (ключ / secretkey), когда я использую приведенный ниже код, он сохраняет файл в моем корневом каталоге на сервере, и я хочу сохранить его на месте загрузки по умолчанию на локальном компьютере пользователя, так как я не знаю конкретное местоположение загрузки конечного пользователя, какая-нибудь помощь для решения этой проблемы ??

Я исследовал целый день, не мог найти конкретное решение.

$result1 = $this->S3->getObject([
'Bucket' => $bucket,
'Key'    => $keyname,
'SaveAs' => $keyname
]);

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

2)

$cmd = $this->S3->getCommand('GetObject', [
'Bucket' => $bucket,
'Key'    => $keyname,
'ResponseContentDisposition' => 'attachment; filename="'.$keyname.'"'
]);
$signed_url = $this->S3->createPresignedRequest($cmd, '+1 minute');
$url=$signed_url->getUri();
header('Location: '.$url);

Снимок экрана Firefox сохранить как всплывающее окно с отображением исходного URL

1

Решение

В зависимости от того, сколько кода вы хотите написать, есть много способов справиться с этим. Последнее, что я использовал, было немного сложным из-за множества требований безопасности. В двух словах это было так:

  1. Создайте таблицу с основными данными для каждого загруженного / сохраненного файла.

Это включает в себя в основном все параметры, которые библиотека выгрузки выводит после обработки файла, а также некоторые дополнительные параметры, такие как идентификатор группы пользователей (поскольку каждый файл может быть просмотрен только определенной группой пользователей), флаг доступности Y / N и мягкое удаление Дата.

  1. Создайте контроллер загрузок, который будет обрабатывать все задачи, связанные с загрузкой.

Я создал несколько методов внутри, поставив задачу проверить, действительно ли пользователю был разрешен доступ к этому конкретному файлу (или перенаправить его на страницу с ошибкой, если нет).
Между прочим, файл находится в ведре S3, смонтированном на моем веб-сервере с s3fs, но это не имеет значения. То, что вам нужно, не зависит от того, где на самом деле находится файл.

  1. Создать неочевидные ссылки для скачивания

Вместо ссылки на example.com/files/filename.pdf (что упрощает сбор файлов), мои ссылки на скачивание указывают на определенный метод в моем контроллере загрузки (downloads / get_file) и передают неочевидный идентификатор в качестве параметра. IIRC Я использовал параметр зашифрованного rawname, поэтому ссылки выглядят так

<a href="mysite.com/downloads/get_file/hdhekfnflsufdifnfbs">get hello.pdf here</a>
  1. Найти файл, передать его пользователю

При переходе по указанной выше ссылке метод get_file принимает необработанное имя в качестве параметра, находит файл в таблице (получает локальный путь) и выводит его в браузер. Таким образом, пользователь никогда не увидит реальный маршрут / парх или даже реальное имя файла как сохраненное на диске.

0

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector