【发布时间】:2019-06-20 15:18:48
【问题描述】:
我正在尝试从 postgresql 中下载一个以 base 64 编码的文件。该文件的内容在数据库bytea 中似乎很好,但是当我使用 PHP 下载它时就不一样了:
我正在使用 PHP 5.6 和 symfony 2.8。我尝试使用 base 64 解码,但没有成功。
$name = $file->getName();
$content = base64_decode(stream_get_contents($file->getContent()));
$contentType = $file->getContentType();
$response = new Response();
$response->headers->set("Cache-Control", "no-cache private");
$response->headers->set("Content-Description", "File Transfer");
$response->headers->set('Content-Type', $contentType);
$response->headers->set('Content-Disposition', 'attachment; filename="' . $name . '"');
$response->headers->set("Content-Transfer-Encoding", "binary");
$response->headers->set('Content-Length: ', strlen($content));
$response->sendHeaders();
$response->setContent($content);
return $response;
对于这个例子,我用 notepad++ 创建了一个包含字符串“test”的文件。在数据库中显示为“dGVzdA==”。
当我下载文件并解码时,内容是这个“Ǯ8kθطw”,应该是“test”。
【问题讨论】:
-
尝试不带
$response->headers->set("Content-Transfer-Encoding", "binary");标头。您从数据库发布的内容按预期正确解码。 -
仍然是这个:Ǯ8kθطw
-
我会先删除除
Content-Disposition之外的所有标题,看看是否有帮助。如果确实如此,则开始重新添加标题,直到找到破坏内容的标题。您可能还想var_dump($contentType);看看它包含什么(它可能不是您所期望的)。 -
内容类型为:"application/pdf"
-
就像我说的,删除除那个之外的所有标题。
标签: php postgresql symfony-2.8