Сервер SQL — Как отобразить SQLSRV IMAGE в переполнении стека Laravel

Я работаю над приложением, которое использует данные со стороннего сервера (MS SQLSRV), к которому у меня есть только доступ для чтения.

Изображения на этом сервере хранятся как данные типа IMAGE. Я использую php (Laravel 5) в качестве бэкенда для внешнего интерфейса AngularJS для отображения изображений. Я не уверен, как поступить.

$students = DB::table('StudentImage')->where('STUDENTID', $id)->get();
$image = imagecreatefromstring($students[0]->IMAGE1); // unrecognized format error

Я также попробовал это:

$db = new PDO(...);
$stmt = $db->prepare("select IMAGE1 from [StudentImage] where [STUDENTID] = ?");
$stmt->execute([$id]);
$stmt->bindColumn('IMAGE1', $lob, PDO::PARAM_LOB);
$stmt->fetch(PDO::FETCH_BOUND);

return response($lob, 200, ['Content-Type'=>'image/jpg']);

Все, что я получаю, это пустое изображение размером 20×20. Но я могу видеть изображение в Navicat (DB Admin Tool).

Как мне поступить?

1

Решение

После большого количества ударов головой я понял это. Оказывается, есть ограничение размера по умолчанию для «текстовых» полей в SQL Server. Все, что вам нужно сделать, это «сбросить» размер перед запуском SELECT запрос, используя SET TEXTSIZE команда:

<?php

DB::select('SET TEXTSIZE 10485760');

$students = DB::table('StudentImage')->where('STUDENTID', $id)->get();
$image = imagecreatefromstring($students[0]->IMAGE1);

?>

Это позволит установить максимальный размер 10 МБ, которого должно быть достаточно для отображения нужного вам изображения. Это, вероятно, то, что Navicat предварительно устанавливает перед выполнением запроса.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]