如何在下载文件时修复文件的奇怪编码?

时间:2019-06-20 15:18:48

标签: php postgresql symfony-2.8

我正在尝试从以base 64编码的postgresql下载文件。该文件的内容在数据库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==”。

当我下载文件并对其进行解码时,其内容为“ Ǯ8kθطw”,应为“ test”。

1 个答案:

答案 0 :(得分:0)

PGSQL正在将我的文件转换为十六进制值。 它需要被解码。 此外,PQGSQL响应的开头有一个“ /”。需要将其删除。

这是我对内容的处理方式

$content = base64_decode(hex2bin(
    substr(
        stream_get_contents(
            $file->getContent()
        )
    ,1)
));