Я не знаком с Microsoft SQL Server и типом данных varbinary(max)
, но база данных, которую мне нужно использовать, хранит изображения как таковые.
У меня вопрос, что мне нужно сделать, чтобы прочитать эти данные и преобразовать их обратно в читаемый тип изображения?
Пока что я сделал
SELECT CONVERT(VARCHAR(max), [IMAGE], 2)
FROM [demo].[dbo].[DOCIMAGES]
WHERE [TITLE] = 'test.jpg'
но то, что я получил, было почти таким же, только что 0x
удалено из начала этих данных, когда
SELECT CONVERT(VARCHAR(max), [IMAGE], 0)
FROM [demo].[dbo].[DOCIMAGES]
WHERE [TITLE] = 'test.jpg'
возвращает значение как Lead
.
Затем я попытался выполнить хранимую процедуру, которая сохранит ее в файл, подобный:
DECLARE @ImageData VARBINARY (max);
DECLARE @Path2OutFile NVARCHAR (2000);
DECLARE @Obj INT
SET NOCOUNT ON
SELECT @ImageData = (
SELECT CONVERT(VARBINARY(max), [IMAGE], 1)
FROM [demo].[dbo].[DOCIMAGES]
WHERE [TITLE] = 'test.jpg'
);
SET @Path2OutFile = CONCAT (
'C:\Users\MyPC\Downloads'
,'\'
,'test.jpg'
);
BEGIN TRY
EXEC sp_OACreate 'ADODB.Stream' ,@Obj OUTPUT;
EXEC sp_OASetProperty @Obj ,'Type',1;
EXEC sp_OAMethod @Obj,'Open';
EXEC sp_OAMethod @Obj,'Write', NULL, @ImageData;
EXEC sp_OAMethod @Obj,'SaveToFile', NULL, @Path2OutFile, 2;
EXEC sp_OAMethod @Obj,'Close';
EXEC sp_OADestroy @Obj;
END TRY
BEGIN CATCH
EXEC sp_OADestroy @Obj;
END CATCH
SET NOCOUNT OFF
но это не с ошибкой:
SQL Server заблокировал доступ к процедуре 'sys.sp_OADestroy' компонента
«Процедуры автоматизации Ole», потому что этот компонент отключен как
часть конфигурации безопасности для этого сервера. Система
администратор может разрешить использование «процедур автоматизации Ole» с помощью
используя sp_configure.
Проблема в том, что я не являюсь администратором этого сервера.
В таком случае я могу вывести содержимое [ИЗОБРАЖЕНИЯ] в файл, а затем использовать Java или PHP для потоковой передачи этого содержимого и сохранить его в виде файла изображения?