当前位置: 首页 > 面试题库 >

Symfony2-强制文件下载

杨阳飇
2023-03-14
问题内容

用户单击下载链接时,我正在尝试下载文件。

在控制器中:

    $response = new Response();
    $response->headers->set('Content-type', 'application/octect-stream');
    $response->headers->set('Content-Disposition', sprintf('attachment; filename="%s"', $filename));
    $response->headers->set('Content-Length', filesize($filename));

    return $response;

这将打开对话框以保存文件,但它表示文件为0字节。并将其更改为:

        $response = new Response();
        $response->headers->set('Content-type', 'application/octect-stream');
        $response->headers->set('Content-Disposition', sprintf('attachment; filename="%s"', $filename));
        $response->headers->set('Content-Length', filesize($filename));
        $response->headers->set('Content-Transfer-Encoding', 'binary');
        $response->setContent(readfile($filename));

        return $response;

我得到了一堆奇怪的字符,而不是文件下载对话框。

最后,将“ setContent”行切换为:

    $response->setContent(file_get_contents($filename));

它返回一个PHP错误:

致命错误:允许的内存大小…

关于如何实现这一目标的任何线索?我以前在PHP(没有MVC)中做过,但是我不知道通过Symfony2可以做些什么…

也许解决方案是在PHP.INI中设置memory_limit,但是我认为这不是最佳实践。


问题答案:

首先,感谢大家的答复。我终于在没有X-SendFile的情况下解决了这个问题(这可能是最佳实践)。无论如何,对于那些无法使X-Sendfile
apache模块正常工作(共享主机)的人,这是一个解决方案:

// Generate response
$response = new Response();

// Set headers
$response->headers->set('Cache-Control', 'private');
$response->headers->set('Content-type', mime_content_type($filename));
$response->headers->set('Content-Disposition', 'attachment; filename="' . basename($filename) . '";');
$response->headers->set('Content-length', filesize($filename));

// Send headers before outputting anything
$response->sendHeaders();

$response->setContent(file_get_contents($filename));

return $response;

希望这可以帮助!



 类似资料:
  • 问题内容: 我希望在我的一个站点的每个视频下方添加“下载此文件”功能。我需要强迫用户下载文件,而不仅仅是链接到文件,因为有时这会开始在浏览器中播放文件。问题是,视频文件存储在单独的服务器上。 有什么办法可以强制用PHP下载吗? 问题答案: 您可以尝试这样的事情: 我刚刚测试了它,它对我有用。 请注意,为了能够读取远程URL,您需要启用它。

  • 问题内容: 我的服务器上有一个CSV文件。如果用户单击链接,则应下载该链接,但会在我的浏览器窗口中打开。 我的代码如下 这是我所有开发工作都在上面的普通Web服务器。 我尝试了类似的东西: 现在我文件的内容: 现在我的问题是正在下载,而不是我的CSV文件。它创建一个新文件。 问题答案: .htaccess解决方案 要强行下载服务器上的所有CSV文件,请添加.htaccess文件: PHP解决方案

  • 本文向大家介绍php强制下载文件函数,包括了php强制下载文件函数的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了php强制下载文件函数,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 问题内容: 我有图像列表,我希望每个图像都有一个“下载”链接,以便用户可以下载图像。 所以有人可以指导我如何为php中的任何文件提供下载链接吗? 编辑 我希望在单击下载链接时显示一个下载面板,但我不想导航到要在浏览器中显示的图像 问题答案: 如果要强制下载,可以使用如下所示的内容: 如果仅使用常规链接链接到此脚本,则将下载文件。 顺便说一句,上面的代码段需要在页面的开头执行(在没有任何标题或HTM

  • 问题内容: 伙计们,我知道有很多关于强制弹出下载对话框的话题,但是还没有一个解决方案对我有用。 我的应用程序将邮件发送到用户的电子邮件帐户,通知他们“另一个用户向他们发送了一条消息”。这些消息可能具有指向Excel文件的链接。当用户单击其GMail / Yahoo Mail / Outlook中指向该Excel文件的链接时,我希望弹出“文件保存”对话框。 问题:右键单击并在IE上执行“另存为”时,

  • 问题内容: 我有图像列表,我希望每个图像都带有“下载”链接,以便用户可以下载图像。 所以有人可以指导我如何为php中的任何文件提供下载链接吗? 编辑 我希望在单击下载链接时显示一个下载面板,但我不想导航到要在浏览器中显示的图像 问题答案: 如果要强制下载,可以使用类似以下的内容: 如果仅使用常规链接链接到此脚本,则将下载文件。 顺便说一句,上面的代码段需要在页面的开头执行(在没有任何标题或HTML