Laravel скачать файл varbinary с сервера SQL - PullRequest
0 голосов
/ 20 апреля 2020

Я хочу сохранить PDF-файлы в поле varbinary (max), используя Laravel 5 и SQl server 2016. Проблема заключается в попытке загрузить файл с сервера SQL, но он продолжает возвращать поврежденный файл. файлы. Когда я загружаю, я использую:

'file' => DB::raw("CONVERT(VARBINARY(MAX), '" . base64_encode(file_get_contents($upload_file)) . "')"),

Когда я загружаю, я делаю это:

$document = DB::table('files')
                ->selectRaw('CAST(file AS VARBINARY(MAX)) AS file')->first();

$pdf = base64_decode($document->file);

return response($pdf)
            ->header('Cache-Control', 'no-cache private')
            ->header('Content-Description', 'File Transfer')
            ->header('Content-type','application/pdf;base64')
            ->header('Content-length', strlen($pdf))
            ->header('Content-Disposition', 'attachment; filename=Teste')
            ->header('Content-Transfer-Encoding', 'binary');

Исходные файлы имеют размер 97 КБ, а при загрузке - 187 КБ. Любая помощь, пожалуйста!

1 Ответ

0 голосов
/ 20 апреля 2020

Решите проблему: сначала я преобразовал в шестнадцатеричный файл загруженный файл:

$datastring = file_get_contents($request->file('upload_file')); 
$unpack = unpack("H*hex", $datastring); 
$unpack = '0x'.$unpack['hex'];
//store DB
'file' => DB::raw("CONVERT(VARBINARY(MAX), $unpack)"),

Затем при загрузке мне пришлось преобразовать обратно в корзину:

$file_contents = hex2bin($document->file);

return response($file_contents)
            ->header('Cache-Control', 'no-cache private')
            ->header('Content-Description', 'File Transfer')
            ->header('Content-type','application/pdf;base64')
            ->header('Content-length', strlen($file_contents))
            ->header('Content-Disposition', 'attachment; filename=aaaa')
            ->header('Content-Transfer-Encoding', 'binary');     

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...