如何从Symfony3下载DOCX文件?

时间:2017-04-12 11:00:13

标签: php symfony download docx

我有一个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)_:ıÉ%fl1'ŸúIs“

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

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

1 个答案:

答案 0 :(得分: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