Как получить файл из FILESTREAM? - PullRequest
0 голосов
/ 14 апреля 2020

Я установил SQL Сервер Express на своем компьютере, включил и настроил FILESTREAM для хранения и получения PDF-файлов с SQL Сервера. Я успешно загрузил файлы на свою таблицу как BLOB-файлы, но у меня возникают трудности с их получением. Мой подход заключается в использовании временного каталога для создания файлов, чтобы я мог их открыть. У меня есть следующий код:

Я настроил автоматизацию ole

sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE;  
GO  
sp_configure 'Ole Automation Procedures', 1;  
GO  
RECONFIGURE;  
GO  

У меня есть следующая запись в моей таблице BusinessFiles:

    FileID          415578C7-B058-49A5-A1E4-5A4E7218EA19
    InvoiceID   99999
    FileName    file1
    FileType    pdf
    ImageFile   0x255044462D312…

Этот следующий фрагмент кода по-видимому, создаст файл из файлового потока.

DECLARE 
@FILE VARBINARY(MAX)
,@FILEPATH VARCHAR(MAX)
,@ObjectToken INT
,@FileType VARCHAR(MAX)
,@FILENAME VARCHAR(MAX)

Set @FILENAME = (SELECT [FileName] FROM BusinessFiles where FileID = '415578C7-B058-49A5-A1E4-5A4E7218EA19')
Set @FileType = (SELECT FileType FROM BusinessFiles where FileID = '415578C7-B058-49A5-A1E4-5A4E7218EA19')
SELECT @FILE = ImageFile FROM BusinessFiles where FileID = '415578C7-B058-49A5-A1E4-5A4E7218EA19'
Set @FILEPATH = CONCAT('C:\Users\user\Desktop\', @FILENAME,'.',@FileType)

EXEC sp_OACREATE 'ADODB.Stream', @ObjectToken OUTPUT
EXEC sp_OASetProperty @ObjectToken, 'Type', 1
EXEC sp_OAMethod @ObjectToken, 'Open'
EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @FILE
EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @FILEPATH, 2
EXEC sp_OAMethod @ObjectToken, 'Close'
EXEC sp_OADestroy @ObjectToken 
Go

Этот код выполняется, и я получаю сообщение Успешно завершено выполнение команд. Однако в моей папке ничего нет C: \ Users \ user \ Desktop. Я что-то пропустил? Спасибо;

Я проверил правильный путь к файлу и все наборы хороши.

1 Ответ

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

Зная разрешения SQL Сервер исправит проблему SaveToFile. В моем случае я изменил каталог SavetoFile на C: \ temp.

...