- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将 Nginx X-Accel 与 Symfony 一起使用,目前我已经有了这段代码。
$request->headers->set('X-Sendfile-Type', 'X-Accel-Redirect');
$request->headers->set('X-Accel-Mapping', '/var/www/html/files/=/protected-files/');
$request->headers->set('X-Accel-Limit-Rate', '1k');
BinaryFileResponse::trustXSendfileTypeHeader();
$response = new BinaryFileResponse($file->getAbsolutePath());
$response->headers->set('Content-Disposition', 'attachment;filename="'.$filename.'"');
$response->headers->set('Cache-Control', 'no-cache');
return $response;
以及 Nginx session :
location /protected-files {
internal;
alias /var/www/html/files;
}
为了测试代码(知道文件是否真的由 Nginx 提供),我在 1ko/s 上添加了 X-Accel-Limit-Rate,但是立即下载了 2Mo 文件,那么我确定,它不能正常工作。
我在互联网上找到了这部分代码,因为 Symfony 文档并没有真正解释如何使用它......( http://symfony.com/doc/current/components/http_foundation.html#serving-files )
为什么我需要返回带有文件的 BinaryResponse,就像没有 Nginx X-Sendfile 一样,并在 resuqest 中添加 X-Sendfile、X-Accel 属性?我只返回响应,没有请求,它如何工作?
最佳答案
最后,我将 X-Accel 部分从 $request 移至 $response,并仅设置 X-Accel-Redirect header 。
如果我们想限制下载速度,可以使用$request->headers->set('X-Accel-Limit-Rate', 10000);
,效果很好,数量以字节为单位。
然后我将 $response->headers->set('Content-Disposition', 'attachment;filename="'.$filename.'"');
更改为 $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $filename);
最终代码为:
BinaryFileResponse::trustXSendfileTypeHeader();
$response = new BinaryFileResponse($file->getAbsolutePath());
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
$filename
);
$response->headers->set('X-Accel-Redirect', '/protected-files/path/to/file');
return $response;
在 Nginx 中:
location /protected-files/ {
internal;
alias /var/www/html/files/;
}
关于symfony - 如何将 Nginx X-Accel 与 Symfony 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44323173/
我是一名优秀的程序员,十分优秀!