Intereting Posts
jQuery DataTables: Uncaught TypeError: невозможно прочитать свойство «mData» неопределенного PHP imagick с вопросом PDF Как использовать конфигурационный файл YAML в Silex Framework PHP: отображать записи из базы данных группами по пять? Добавление строки запроса к случайному URL-адресу Как проверить, существует ли уже существующее значение, чтобы избежать дублирования? PHP Предупреждение: mysqli_fetch_assoc () ожидает ровно 1 параметр, 3 заданный в JMSSerializer отдельно – аннотация не существует или не может быть загружена автоматически Неустранимая ошибка: нехватка памяти, но у меня много памяти (PHP) Фоновый процесс PHP все еще влияет на загрузку страницы Larvel 4.2 artisan CLI больше не работает после обновления композитора Запрос не отображается полностью Лучший способ включения представлений в представлениях в CodeIgniter php regex: получить значение src Как подключить пользователя к файлу cookie для входа в PHP?

Работа с зашифрованными файлами в Laravel (как загрузить дешифрованный файл)

В моем webapp пользователи могут загружать файлы. Перед сохранением и сохранением содержимое файла зашифровывается с помощью следующего:

Crypt::encrypt(file_get_contents($file->getRealPath())); 

Затем я использую файловую систему, которая поставляется с Laravel для перемещения файла

 Storage::put($filePath, $encryptedFile); 

У меня есть таблица для хранения информации о каждом файле с такими столбцами, как:

  • Я бы
  • Путь к файлу
  • имя файла
  • original_name (включает расширение)

Теперь я хочу, чтобы пользователь мог загрузить этот зашифрованный файл. Однако у меня возникли проблемы с расшифровкой файла и возвратом его пользователю. В разделе ответов на загрузку файлов документации Laravel предлагается сделать следующее:

 return response()->download($pathToFile, $name, $headers); 

Он хочет, чтобы путь к файлу был прекрасным, но в какой момент я могу расшифровать содержимое файла, чтобы оно было действительно читаемым?

Кажется, я могу это сделать:

 $encryptedContents = Storage::get($fileRecord->file_path); $decryptedContents = Crypt::decrypt($encryptedContents); 

… но я не знаю, как вернуть его как загрузку с указанным именем файла.

Вы можете вручную создать ответ так:

 $encryptedContents = Storage::get($fileRecord->file_path); $decryptedContents = Crypt::decrypt($encryptedContents); return response()->make($decryptedContents, 200, array( 'Content-Type' => (new finfo(FILEINFO_MIME))->buffer($decryptedContents), 'Content-Disposition' => 'attachment; filename="' . pathinfo($fileRecord->file_path, PATHINFO_BASENAME) . '"' )); 

Вы можете проверить API Laravel для получения дополнительной информации о параметрах метода make . Функция pathinfo также используется для извлечения имени файла из пути, поэтому он отправляет правильное имя файла с ответом.