PHPWord любой способ не записывать файл на диск при загрузке файла

Я использую PHPWord для создания документов Word, и я надеюсь, что кто-то может помочь в этом. В соответствии с его настройкой, на мой сервер из браузера отправляется запрос ajax с просьбой о создании документа PHPWord. Документ создается и хранится в файле на сервере с таким кодом:

$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
$fileName = $picklistDetails['file_name'] . ".docx";
$filePath = '../users/' . $userId . "_word_" . $fileName;
$objWriter->save($filePath);

Чтобы позволить пользователю загрузить файл, после успешного выполнения ajax-запроса я использую window.location, чтобы отправить пользователя на страницу, которая помещает вместе с этим документ word (что позволяет начать загрузку):

$fileName = $this->session->word_file_name;
$filePath = $this->session->word_file_path;

header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=" . $fileName);
header("Content-Transfer-Encoding: binary");
readfile($filePath);

Все это прекрасно работает, единственная проблема в том, что я действительно предпочел бы, чтобы файл не был сохранен на сервере перед загрузкой. Я изучал PHPWord и согласно этому посту (Автоматическая загрузка файла вложения с помощью PHPWord) есть некоторое обсуждение того, как вы можете отправить файл в выходной поток php вместо записи его на диск, но поскольку сборка документа word выполняется в ajax, а затем для загрузки используется отдельная страница, я не думаю, что это будет Работа. Я ошибся?

Также в этом посте (Сохранить сгенерированный файл в базу данных PHPWORD) есть описание того, как сохранить его в БД, но на сервере все еще есть промежуточный этап файла, которого мне следует избегать.

Есть ли способ, которым я могу изменить

$objWriter->save($filePath);

чтобы не записать его на диск, а вместо этого сохранить его в переменную или что-то? Тогда я мог бы хранить в базе данных, где я мог бы зашифровать его.

Любая помощь будет оценена. Я начинающий php-программист, поэтому я буду благодарен за подробную помощь. хорошего дня.

2

Решение

Должно быть так же просто, как делать $objWriter->save("php://output");:

$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
$fileName = $picklistDetails['file_name'] . ".docx";
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=" . $fileName);
header("Content-Transfer-Encoding: binary");
$objWriter->save("php://output");

Пропустить перенаправление полностью. Просто window.location непосредственно к приведенному выше коду ^, и файл должен загрузиться после завершения сборки.

0

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

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

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