PHPWord下载文件时以任何方式不将文件写入磁盘

时间:2018-12-17 02:41:40

标签: php 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,根据这篇文章(article),我们进行了一些讨论,讨论如何将文件发送到php的输出流而不是将其写入磁盘,但是因为建立word文档是用ajax和然后使用一个单独的页面下载它,我认为这不起作用。我错了吗?

在本帖子(Auto download the file attachment using PHPWord中,也有关于如何将其存储到数据库的描述,但是服务器上还有文件的中间步骤,我需要避免。

有什么办法可以修改

$objWriter->save($filePath); 

不将其写入磁盘,而是将其保存到变量或其他内容?然后我可以将其存储在可以对其进行加密的数据库中。

任何帮助将不胜感激。我是一个初学者的php程序员,所以详细的帮助将不胜感激。祝你有美好的一天。

1 个答案:

答案 0 :(得分:0)

应该像做$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直接到上面的代码^,文件构建完成后就应该下载。