Передача файла на сервер в 1С 8.3

Курс

Передача файла на сервер

Для передачи файла с клиента на сервер можно воспользоваться методом НачатьПомещениеФайлаНаСервер. Передача выполняется через временное хранилище. Пятым параметром нужно указать путь к файлу на клиенте, первым параметром — описание оповещения с именем процедуры, которая будет вызвана после помещения файла во временное хранилище.

Сначала файл помещается во временное хранилище и получается его адрес. Адрес передается на сервер. На сервере файл получается из временного хранилища и записывается на диск компьютера сервера:

Первый параметр процедуры из описания оповещения имеет тип ОписаниеПомещенногоФайла. Данный объект имеет 3 свойства:

  • Адрес — адрес файла во временном хранилище.
  • ПомещениеФайлаОтменено — признак отмены от помещения файла, тип Булево.
  • СсылкаНаФайл — объект СсылкаНаФайл, свойство Файл которого имеет тип Файл.

В результате через параметр Адрес можно получить файл из временного хранилища. А через параметр СсылкаНаФайл.Файл можно получить всю необходимую информацию о файле.

По умолчанию файл будет удален из временного хранилища после окончания серверного вызова. Однако, если последним параметром указать уникальный идентификатор формы, то файл будет удален только после закрытия этой формы:

Если до помещения файла в хранилище известен адрес во временном хранилище, куда нужно поместить файл, то его можно указать четвертым параметром:

Если файла не существует, то при вызове метода НачатьПомещениеФайлаНаСервер будет выброшено исключение «Файл не обнаружен ‘Здесь будет путь к файлу’. 2(0x00000002): Не удается найти указанный файл.»

Проверка файла до помещения во временное хранилище

Если до помещения файла во временное хранилище нужно выполнить какие-то проверки, то это можно сделать в специальной процедуре, выполняемой до помещения файла во временное хранилище. Имя этой процедуры нужно указать в описании оповещения, которое указывается третьим параметром в методе НачатьПомещениеФайлаНаСервер:

У данной процедуры должно быть 3 параметра:

  • ПомещаемыйФайл — объект СсылкаНаФайл, у которого есть свойство Файл с помощью которого можно получить всю информацию о помещаемом файле.
  • ОтказОтПомещенияФайла — если присвоить данному параметру Истина, то файл не будет помещен во временное хранилище. На этом процесс помещения файла во временное хранилище будет прекращен и никакие другие процедуры не будут вызваны.
  • ДополнительныеПараметры — произвольный параметр, который можно передать через описание оповещения.

Например, можно проверить размер файла и если он слишком большой, то отказаться от помещения во временное хранилище:

Помещение файла во временное хранилище с диалогом выбора

Можно предоставить пользователю самому выбрать файл, который нужно поместить во временное хранилище. В этом случае сначала будет открыт диалог выбора файла, пользователь выберет файл и данный файл будет помещен во временное хранилище.

Для открытия диалога выбора файла нужно пятым параметром вместо пути к файлу указать объект ПараметрыДиалогаПомещенияФайлов. Данный объект схож с объектом ДиалогВыбораФайла, но имеет только 4 свойства:

  • Заголовок
  • МножественныйВыбор
  • Фильтр
  • ИндексФильтра

В этом случае сначала будет открыто диалоговое окно для выбора файла:

Выбранный файл будет помещен во временное хранилище.

Если пользователь нажмет на кнопку Отмена и откажется от выбора файла, то первый параметр в процедуре, вызываемой после помещения файла во временное хранилище будет равен Неопределено.

Если использовалась процедура, вызываемая до помещения файла во временное хранилище, то она будет вызвана после того как пользователь выберет файл.

Можно вообще не указывать объект ПараметрыДиалогаПомещенияФайлов, в этом случае все равно будет открыт диалог выбора файла:

Прогресс помещения файла во временное хранилище

Если файл большой, то он может долго загружаться во временное хранилище. В этом случае неплохо было бы показать пользователя прогресс помещения файла во временное хранилище. Для этого в метод НачатьПомещениеФайлаНаСервер вторым параметром можно передать описание оповещения с именем процедуры, которая будет периодически вызываться в процессе помещения файла во временное хранилище. У данной процедуры должно быть 4 параметра:

  • ПомещаемыйФайл — объект СсылкаНаФайл, у которого есть свойство Файл с помощью которого можно получить всю информацию о помещаемом файле.
  • Помещено — процент помещенной части файла. Число от 0 до 100.
  • ОтказОтПомещенияФайла — если присвоить данному параметру Истина, то файл не будет помещен во временное хранилище. При этом процедура выполняемая после помещения файла будет вызвана, параметр ОписаниеПомещенногоФайла.ПомещениеФайлаОтменено будет равен Истина.
  • ДополнительныеПараметры — произвольный параметр, который можно передать через описание оповещения.

В результате в процессе помещения файла во временное хранилище будет показано окно состояния с прогрессом:

Количество вызовов процедуры ХодВыполнения не определено. Для маленького файла это может быть только 1 раз, для большого даже больше 100.

Если в этой процедуре присвоить параметру ОтказОтПомещенияФайла = Истина, то в процедуре, которая будет вызвана после помещения файла у первого параметра свойство ПомещениеФайлаОтменено тоже будет равно Истина и файл не будет помещен во временное хранилище:

Асинхронный метод через обещание

Есть аналогичный метод ПоместитьФайлНаСерверАсинх. Данный метод тоже является асинхронным, но вместо описания оповещения использует обещание.

Параметры данного метода полностью совпадают с параметрами метода НачатьПомещениеФайлаНаСервер, только здесь не используется первый параметр с описанием оповещения с именем процедуры, которая вызывается после помещения файла во временное хранилище. Вместо этого обещание возвращает объект ОписаниеПомещенногоФайла (или Неопределено, если использовался диалог выбора и пользователь отказался от выбора файла):

Помещение во временное хранилище нескольких файлов

Если нужно поместить во временное хранилище сразу несколько файлов, то можно вызвать метод НачатьПомещениеФайлаНаСервер несколько раз. Однако для этого есть более удобный метод — НачатьПомещениеФайловНаСервер.

Параметры данного метода схожи с параметрами метода НачатьПомещениеФайлаНаСервер, только там где был один файл или объект, здесь будет массив файлов/объектов.

Вместо пути к файлу нужно передать массив объектов ОписаниеПередаваемогоФайла. Данный объект имеет 2 свойства:

  • Имя — полный путь к файлу на клиенте.
  • Хранение — адрес временного хранилища, куда нужно поместить файл. Можно не указывать, тогда будет создан новый адрес.

В данном примере последним параметром был указан уникальный идентификатор формы. Если его не указать, то второй файл не будет записан на сервер. Дело в том, что в данном примере вызов сервера происходит дважды: сначала для первого файла, потом для второго. Если не указан уникальный идентификатор формы, то файл будет удален из временного хранилища после окончания серверного вызова, то есть после записи первого файла. А при втором вызове сервера, для записи второго файла, временное хранилище уже будет пустым.

Поэтому нужно или указывать уникальный идентификатор формы в методе НачатьПомещениеФайловНаСервер или записывать все файлы на сервер за один серверный вызов.

Процедура, которая вызывается до помещения файлов во временное хранилище ничем не отличается от метода НачатьПомещениеФайлаНаСервер. Только в данном случае первым параметром будет не объект СсылкаНаФайл, а массив объектов СсылкаНаФайл, по одному для каждого файла. Второй параметр отменяет помещение во временное хранилище не одного файла, а сразу всех файлов:

Диалог выбора файла тоже ничем не отличается, но здесь нужно для объекта ПараметрыДиалогаПомещенияФайлов установить свойство МножественныйВыбор = Истина, чтобы пользователь мог выбрать несколько файлов:

А можно вообще не заполнять четвертый параметр:

Процедура, которая вызывается в процессе помещения файлов во временное хранилище немного отличается. Для данного метода она имеет 6 параметров:

  • ПомещаемыйФайл — объект СсылкаНаФайл, у которого есть свойство Файл с помощью которого можно получить всю информацию о помещаемом файле.
  • Помещено — процент помещенной части одного файла. Число от 0 до 100.
  • ОтказОтПомещенияФайла — если присвоить данному параметру Истина, то текущий файл не будет помещен во временное хранилище.
  • ПомещеноВсего — процент помещения всех файлов. Число от 0 до 100. Определяется пропорционально размерам файла. Если размер первого файла 1 МБ, а второго 2 МБ, то при загрузке первого файла данный параметр будет равен 33,33%, а не 50%.
  • ОтказОтПомещенияВсехФайлов — если присвоить данному параметру Истина, то будет отменено помещение сразу всех файлов во временное хранилище. В этом случае сразу будет вызвана процедура из описания оповещения после загрузки всех файлов.
  • ДополнительныеПараметры — произвольный параметр, который можно передать через описание оповещения.

То есть добавлено 2 параметра: ПомещеноВсего и ОтказОтПомещенияВсехФайлов. С помощью них можно анализировать состояние загрузки всех файлов, а также отказаться от загрузки сразу всех файлов.

Данная процедура будет вызвана как минимум по одному разу для каждого файла. В целом количество вызовов данной процедуры не определено и зависит от размера файлов.

Также метод НачатьПомещениеФайловНаСервер позволяет указать маску для поиска загружаемых файлов. Например: F:\тест\*.txt. В этом случае из каталога тест во временное хранилище будут загружены все текстовые файлы:

У метода НачатьПомещениеФайловНаСервер тоже есть асинхронный аналог через обещание:

Служебные объекты

Рассмотрим служебные объекты, которые используются при помещении файлов во временное хранилище.

СсылкаНаФайл

Объект СсылкаНаФайл представляет из себя указатель файла на диске. Используется в процедурах вызываемых до помещения файла во временное хранилище, в процессе помещения и после помещения.

Объект СсылкаНаФайл имеет следующие свойства:

  • Имя — имя файла без полного пути.
  • Расширение — расширение файла.
  • ИдентификаторФайла — уникальный идентификатор файла.
  • Файл — объект типа Файл. Через него можно получить различные параметры файла.

Также у данного объекта есть несколько методов:

  • Размер — возвращает размер файла в байтах.
  • ПолучитьВремяИзменения — возвращает дату и время изменения файла.
  • ПолучитьУниверсальноеВремяИзменения — возвращает универсальную дату и время изменения файла.

Данный объект нельзя создать через конструктор.

Объект СсылкаНаФайл можно передать пятым параметром в метод НачатьПомещениеФайлаНаСервер вместо пути к файлу:

А также в метод НачатьПомещениеФайловНаСервер можно передать массив ссылок на файл, вместо массива с путями к файлам:

ОписаниеПомещенногоФайла

Объект ОписаниеПомещенногоФайла используется для описания файла, который был помещен во временное хранилище. Можно сказать, что он является результатом для методов НачатьПомещениеФайлаНаСервер и НачатьПомещениеФайловНаСервер (во втором случае это будет массив объектов ОписаниеПомещенногоФайла).

Данный объект имеет следующие свойства:

  • Адрес — адрес файла во временном хранилище. Если равен Неопределено, значит загрузка файла была отменена в процессе загрузки файла.
  • ПомещениеФайлаОтменено — если равен Истина, значит загрузка файла была отменена в процессе загрузки файла. В остальных случаях равен Ложь.
  • СсылкаНаФайл — объект типа СсылкаНаФайл.

ПараметрыДиалогаПомещенияФайлов

Объект ПараметрыДиалогаПомещенияФайлов используется для описания параметров диалогового окна, с помощью которого пользователь может выбрать файлы, которые нужно поместить во временное хранилище.

Данный объект имеет следующие свойства:

  • Заголовок
  • Фильтр
  • ИндексФильтра
  • МножественныйВыбор

Данные свойства аналогичны свойствам объекта ДиалогВыбораФайла.

Для метода НачатьПомещениеФайловНаСервер свойство МножественныйВыбор должно быть равно Истина, чтобы пользователь мог выбрать сразу несколько файлов.

ОписаниеПередаваемогоФайла

Объект ОписаниеПередаваемогоФайла используется для описания одного из файлов для метода НачатьПомещениеФайловНаСервер.

Данный объект имеет 2 свойства:

  • Имя — полный путь к файлу на клиенте.
  • Хранение — адрес временного хранилища, куда нужно поместить файл. Можно не указывать, тогда будет создан новый адрес.

Затем массив таких объектов передается в метод НачатьПомещениеФайловНаСервер.

Связь методов и объектов

Связь всех методов и объектов можно изобразить с помощью следующих схем:

Для метода НачатьПомещениеФайлаНаСервер:

Для метода НачатьПомещениеФайловНаСервер:

В заключении стоит отметить, что максимальный размер одного файла помещаемого во временное хранилище ограничен размером в 4 ГБ.

Синхронные методы

Все выше рассмотренные методы являются асинхронными. Также есть аналогичные синхронные методы: ПоместитьФайл и ПоместитьФайлы. Данные методы считаются устаревшими, поэтому не будем их рассматривать. Им на замену пришли асинхронные методы НачатьПомещениеФайла и НачатьПомещениеФайлов, но и они теперь считаются устаревшими.


Подписывайтесь на группу ВКонтакте , где я публикую ссылки на новые статьи с данного сайта, а также интересные материалы с других ресурсов по программированию в 1С
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Используя этот сайт, Вы даете согласие на использование cookies. На данном этапе Вы можете отказаться от использования cookies, настроив необходимые параметры в своем браузере.
ok