Как исправить странную кодировку файла при загрузке? - PullRequest
1 голос
/ 20 июня 2019

Я пытаюсь загрузить файл из postgresql, закодированный в базе 64. Кажется, что содержимое файла в базе данных хорошее, bytea, но это не то же самое, когда я загружаю его с помощью PHP:

Я использую PHP 5.6 с Symfony 2.8. Я пытался декодировать в базе 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 голосов
/ 20 июня 2019

PGSQL преобразует мой файл в шестнадцатеричное значение.Это нужно было расшифровать.Более того, в начале ответа PQGSQL есть "/".Его нужно удалить.

Вот мое отношение к содержанию:

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