Организация хранилища файлов. Извлечение файла из базы данных.   

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

//________________________________________________________
Процедура глПолучитьИмяИПуть(ИмяФайла,Путь,Имя) Экспорт
    //(с) www.perlscript.ru
    Перем ВремСтрока;
    ВремСтрока=ИмяФайла;
    ВремСтрока=СтрЗаменить(ВремСтрока,"",РазделительСтрок);
    Имя=СтрПолучитьСтроку(ВремСтрока,СтрКоличествоСтрок(ВремСтрока));
    Путь=Лев(ИмяФайла,СтрДлина(ИмяФайла)-СтрДлина(Имя));
КонецПроцедуры
//________________________________________________________
Функция глЗаписатьФайлИзБазы(ТекНомер,ИмяФайла) Экспорт
    Если МонопольныйРежим()=1 Тогда
        Предупреждение("Невозможно выполнить запрос в монопольном режиме!",10);
        //Действия
        Возврат 0;
        //********
    КонецЕсли;
    ВремКаталог=КаталогПользователя();
    ИмяФайлаФормы=ВремКаталог+"s.frm";
    ИмяФайлаАрхива=ВремКаталог+"xxx.rar";
    Текст=СоздатьОбъект("Текст");
    Если ФС.СуществуетФайл(ИмяФайла)=1 Тогда
        ФС.УдалитьФайл(ИмяФайла);
    КонецЕсли;
    Если ФС.СуществуетФайл(ИмяФайлаАрхива)=1 Тогда
        ФС.УдалитьФайл(ИмяФайлаАрхива);
    КонецЕсли;
    Если ФС.СуществуетФайл(ИмяФайлаФормы)=1 Тогда
        Текст.Открыть(ИмяФайлаФормы);
    КонецЕсли;
    Текст.Очистить();
    Текст.ДобавитьСтроку("8.0");
    Текст.ДобавитьСтроку("1");
    Текст.ДобавитьСтроку("1 SQLIMAGE 0 0 """" 1 Picture """""+РазделительСтрок);
    Текст.Записать(ИмяФайлаФормы);
    КомандаСистемы("bcp ""Select Picture From Sertificat.dbo.pics where Number="+ТекНомер+""" queryout "+ИмяФайлаАрхива+" -Usa -S"+глСервер+" -P"+глПароль+" -f"+ИмяФайлаФормы);
    //теперь разархивируем.
    ТекПуть="";
    ТекИмя="";
    глПолучитьИмяИПуть(ИмяФайла,ТекПуть,ТекИмя);
    КомандаСистемы("c:rar.exe e -o+ "+ИмяФайлаАрхива+" "+ТекИмя+" "+ТекПуть);
    Если ФС.СуществуетФайл(ИмяФайлаФормы)=1 Тогда
        ФС.УдалитьФайл(ИмяФайлаФормы);
    КонецЕсли;
    Если ФС.СуществуетФайл(ИмяФайлаАрхива)=1 Тогда
        ФС.УдалитьФайл(ИмяФайлаАрхива);
    КонецЕсли;
    Возврат 1;
КонецФункции

В случае удачного выполнения операции функция возвращает единицу, иначе ноль.

Обратите внимание: в данном примере считается что архиватор «rar.exe» находится на диске «С:»

 Вернуться к статье "Организация хранилища файлов внутри базы данных 1C+MS-SQL"