此处使用 Symfony 2.5,用户将 MS Office 文件上传到我们的应用程序中,并在以后根据需要下载。现在,当文件附件包含非 ASCII 字符(这很常见,因为我们来自捷克共和国),Symfony 会引发错误“文件名回退必须仅包含 ASCII 字符。”
我发现了很多关于这个问题的报告和讨论,例如
...但没有真正的解决方案。我知道在制作 Content-Disposition 标头时我可以将文件名转换为 ascci,但它会更改呈现给用户的文件名,这对用户来说并不好而且相当误导。有没有办法避免这种情况并能够提供以前的文件名?能够下载文件名中包含非 ASCII 字符的文件在互联网上很常见,那么为什么有这个限制呢?
按照此How to Encode the filename parameter of Content-Disposition header in HTTP? 我什至尝试使用 urlencode() 对文件名进行编码,但现在它说 % 不允许使用 char :-(
更新 1: 这是我正在使用的代码片段。我正在使用流式传输对浏览器的响应,并且我认为标头是手动定义的。
$response = new StreamedResponse();
$response->headers->set('Content-Type', $upload->getMimeType());
$contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $upload->getFilename());
$response->headers->set('Content-Disposition', $contentDisposition);
Run Code Online (Sandbox Code Playgroud)
Symfony 4$filenameFallback具有HeaderUtils::makeDisposition.
例子
$filenameFallback = preg_replace(
'#^.*\.#',
md5($filename) . '.', $filename
);
$disposition = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
$filename,
$filenameFallback
);
$response->headers->set('Content-Disposition', $disposition);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5994 次 |
| 最近记录: |