Имя: Пароль:
1C
1С v8
Оптимизация передачи файлов между клиентом и сервером
0 Adept
 
11.04.17
10:05
Есть файлики которые надо таскать с клиента на сервер, меняются не често, но и в базу их сохранять особого смысла нет. Решил сохранять адрес в хранилище, в параметре сеанса, и потом использовать данные из  временного хранилища. Соответственно сеанс перезапустил - файлики подтянулись новые, работаешь в текущем сеансе - берешь из адреса в хранилище. Заметил странную вещь, время вызова с клиента на сервер практически не изменилось, такое ощущение что 1с - ка все равно тянет внутренность хранилища на сервер. Вот пример процедуры.
Может что то не так делаю(?именно с этим решением, в справочник я знаю как затянуть)



Функция ЗагрузиьтьДанныеВоВременноеХранилище(МассивСсылок) Экспорт
    АдресВХранилище = Тесты.ПолучитьАдресТестовогоНабора();
    Если  НЕ ЗначениеЗаполнено(АдресВХранилище)  Тогда
        КаталогСФайлами = Тесты.ПолучитьКаталогСДанными();
        ИменаФайловНеобходимыхДанных = ТестыКлиентСервер.ПолучитьИменаФайловНеобходимыхДанных(МассивСсылок);
        
        СоответствиеДД = Новый Соответствие;
        Для Каждого текФайл Из ИменаФайловНеобходимыхДанных Цикл
            СоответствиеДД.Вставить(текФайл,Новый ДвоичныеДанные(КаталогСФайлами+текФайл));
        КонецЦикла;
        
        АдресВХранилище = ПоместитьВоВременноеХранилище(СоответствиеДД, Новый УникальныйИдентификатор);
        Тесты.УстановитьАдресТестовогоНабора(АдресВХранилище);
        
    КонецЕсли;
    Возврат АдресВХранилище
КонецФункции
1 zak555
 
11.04.17
10:15
Зачем файл на сервере
2 Adept
 
11.04.17
10:19
(1) Большой, таскать туда сюда каждый раз долго
3 sFAQer
 
11.04.17
10:27
(2) Зачем он впринципе там?
4 Adept
 
11.04.17
10:30
(3) Данные из него нужны, это выгрузка из базы на клиенте, для сверки
5 sFAQer
 
11.04.17
10:59
(4) Ну так данные и передавай на сервер, файл там на кой?
6 Adept
 
11.04.17
11:01
(5) Файл не данные?
7 spiller26
 
11.04.17
11:24
Попробуй сделать через временные файлы на сервере.

    ПутьВременногоФайлаНаСервере = ПолучитьИмяВременногоФайла();
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(Объект.ИмяФайлаНаКлиенте);    
    ДвоичныеДанные.Записать(ПутьВременногоФайлаНаСервере);
...
        УдалитьФайлы(ПутьВременногоФайлаНаСервере);

это для одного, для толпы файлов, можешь создать им каталог на сервере.
8 Adept
 
11.04.17
11:32
(7) уже тогда проще регистр, временные файлы чистить надо ...
9 H A D G E H O G s
 
11.04.17
11:36
(8) Конечно проще и нужнее регистр. Ты еще спрашиваешь.
10 Adept
 
11.04.17
11:39
(9) оно то да, но не понятно  пчему при каждом обмене с сервером идет синхронизация хранилища, при том что ни оно не менялось ни адрес не менялся в этом хранилище
11 shpioleg
 
11.04.17
11:53
Я у себя так сделал. Предварительно на клиенте зипую большой файл во временный, создаю двоичные данные, удаляю временный файл, двоичные данные передаю на сервер параметром функции.