Передаем файл с клиента на сервер
Всем привет! В статье ‘1с начатьпомещениефайла’ была допущена небольшая неточность: мы рассмотрели метод глобального контекста ‘НачатьПомещениеФайлов’, что не соответствовало названию заметки. Сегодня мы эту ошибку исправим и рассмотрим как передать файл с клиента на сервер используя метод ‘1с начатьпомещениефайла’.
Допустим мы на клиенте имеем файл ‘xlsx’ и хотим его передать на сторону сервера для обработки. Для этого нам с помощью метода ‘НачатьПомещениеФайла’ необходимо поместить его во временное хранилище:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
&НаКлиенте Процедура ОтправитьНаСервер(Команда) ПолноеИмяФайла = "C:\Users\DVasilev\Desktop\Тест для передачи на сервер\Копия Аудит Реестр договоров.xlsx"; ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьФайлЗавершение", ЭтотОбъект); НачатьПомещениеФайла(ОписаниеОповещения, , ПолноеИмяФайла, Ложь, ЭтаФорма.УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура ОбработатьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт КонецПроцедуры |
Отлично, теперь посмотрим через отладчик какие параметры у нас имеет процедура, которая будет исполнена в результате выполнения метода помещения файла во временное хранилище:
Для того что бы понимать, как правильно описать экспортную процедуру с параметрами для метода ‘НачатьПомещениеФайла’ достаточно обратиться к справке:
Теперь, имея адрес файла во временном хранилище, мы можем передать его на сервер и оттуда уже поместить во временный файл, с которым уже будем работать на сервере:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
&НаКлиенте Процедура ОтправитьНаСервер(Команда) ПолноеИмяФайла = "C:\Users\DVasilev\Desktop\Тест для передачи на сервер\Копия Аудит Реестр договоров.xlsx"; ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьФайлЗавершение", ЭтотОбъект); НачатьПомещениеФайла(ОписаниеОповещения, , ПолноеИмяФайла, Ложь, ЭтаФорма.УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура ОбработатьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт Если Результат Тогда РезультатОбработкиФайла = ПроизвестиОбработкуФайлаНаСервере(Адрес); КонецЕсли; КонецПроцедуры &НаСервере Функция ПроизвестиОбработкуФайлаНаСервере(Адрес) Результат = Новый Массив; ДанныеИзХранилища = ПолучитьИзВременногоХранилища(Адрес); ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("xlsx"); ДанныеИзХранилища.Записать(ИмяПромежуточногоФайла); //теперь на сервере у нас есть временный файл (путь к временному файлу "ИмяПромежуточногоФайла") //с которым мы можем ужа работать: допустим считываем из него данные в массив Результат УдалитьФайлы(ИмяПромежуточногоФайла); Возврат Результат; КонецФункции |
Не забываем удалять временный файл после обработки. Хотя 1с и говорит что данный временный файл будет удален после завершения рабочего процесса сервера (или клиентского приложения), но лучше сделать это самому. Мало ли.
Советую также прочитать полную версию статьи с сайта 1с по доступу к файловой системе из конфигурации (из кода). Там очень грамотно расписаны примеры того, как не допускать ошибок при работе с файлами. В частности данный пример был использован именно оттуда и успешно применен на практике!
В 1с все просто и доступно! Всем удачи и пока!