Имя: Пароль:
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
Я у себя так сделал. Предварительно на клиенте зипую большой файл во временный, создаю двоичные данные, удаляю временный файл, двоичные данные передаю на сервер параметром функции.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший