Загрузите файл из Amazon S3 на локальный компьютер, не сообщая пользователю об источнике файла в коде PHP. - PullRequest
0 голосов
/ 23 ноября 2018

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, сохраняемого в виде всплывающего окна с указанием исходного кода загрузки

1 Ответ

0 голосов
/ 24 ноября 2018

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

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

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

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

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

Создание неочевидных ссылок для загрузки

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...