【问题标题】:How to download DOCX document from Symfony3?如何从 Symfony3 下载 DOCX 文档?
【发布时间】:2017-04-12 11:00:13
【问题描述】:

我有一个 Symfony 控制器来上传 .docx 文件和另一个来下载它。

我的 symfony 控制器下载文件如下所示:

public function getDocumentationAction(Request $request, $uriFile) {


    $filename = $uriFile;
    $path = $this->getParameter('documents_directory').'/'.$filename;

    $file = file_get_contents($path);

    $response = new Response($file);
    $response->headers->set('Content-Type', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document');
    $response->headers->set('Content-Description', 'File Transfer');
    $response->headers->set('Content-Disposition', 'attachment; filename="'.$filename.'"');
    return $response;

}

问题是下载文件时,文件格式不正确。例如,如果我上传一个包含test 字的docx,当我下载这个文件时,我会得到一个奇怪的.docx,开头为:

PK!›¸ï7f [Content_Types].xml ¢(†¥TÀn¬0ºWÍ?DæVâ°á™™˙8∂H•Ï XıKˆÚ˙˚nDUA*Â)YÔÃÏσɗ⁄öl 1iÔJ÷/z,'Ω“nV≤è…K~œ≤Ѭ)aºÉím ±—˙j0ŸHuªT≤9bx‡<…9Xë ¿Q•Ú— §◊8„A»O1~€Î›qÈÇ√k6<A%≥Á5}fi*âÀ∑kÆíâåñI)_:ıÉ%f1'ŸúIs“

如果我将这个奇怪的 docx 文件转换为 PDF,例如使用:https://online2pdf.com/en/convert-docx-to-pdf,我会得到一个带有 test 字样的 PDF,所以信息在其中,但显示不正确。

我的 Symfony 上传控制器似乎运行良好,因为我可以从服务器访问文件并正确查看内容。

【问题讨论】:

    标签: php symfony download docx


    【解决方案1】:

    您必须返回二进制响应。 你有两个选择:

    $fileName = 'your_docx.docx';
    $path = $this->getParameter('documents_directory').'/'.$filename;
    $content = file_get_contents($path);
    
    $response = new Response();
    $response->headers->set('Content-Type', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document');
    $response->headers->set('Content-Disposition', 'attachment;filename="'.$filename);
    $response->setContent($content);
    return $response;
    

    见:https://stackoverflow.com/a/30254080/6635967

    另一种方法是:

        $fileName = 'your_docx.docx';
        $temp_file = $this->getParameter('documents_directory').'/'.$filename;
        $response = new BinaryFileResponse($temp_file);
        $response->setContentDisposition(
            ResponseHeaderBag::DISPOSITION_ATTACHMENT,
            $fileName
        );
    
        return $response;
    

    在这里找到:http://ourcodeworld.com/articles/read/361/how-to-create-a-word-file-with-php-in-symfony-3

    【讨论】:

      猜你喜欢
      • 2021-02-08
      • 1970-01-01
      • 1970-01-01
      • 2014-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      • 1970-01-01
      相关资源
      最近更新 更多