В веб-клиенте работа с файлами (чтение/запись) производится только на сервере.
Функция ПодключитьРасширениеРаботыСФайлами() используется в веб-клиенте для включения разрешения работы с файлами (поддерживают не все браузеры), если неудачно – возвращает Ложь. Перед первым использованием функции в этом браузере на этом комьютере требуется установить расширение работы с файлами с помощью функции УстановитьРасширениеРаботыСФайлами()
Функции
• ПоместитьФайл(АдресКудаПомещен, ИмяФайла)
• ПолучитьФайл(АдресОткуда)
• ПоместитьФайлы(МассивИменФайлов, МассивАдресовКудаПомещены)
• ПолучитьФайлы(МассивАдресовОткуда)
позволяют передвать файлы между клиентом и сервером.
Функции ПолучитьИзВременногоХранилища() и ПоместитьВоВременноеХранилище() позволяют получить данные файла из временного хранилища сервера, куда они были помещены с помощью ПолучитьФайл() и ПоместитьФайл().
На клиенте файлы располагаются где требуется в файловой системе. На сервере файлы помещаются в «хранилище» — временный каталог файлов сервера 1С. Напрямую с хранилищем работать нельзя – требуется получить значение из хранилища с помощью функции ПолучитьИзВременногоХранилища() и сохранить во временный файл на сервере с помощью функции ПолучитьИмяВременногоФайла()
Данные функции можно использовать не только в веб-клиенте, но и в остальных клиентах для оптимизации работы с файлами.
При использовании данных функций в веб-клиенте необходимо заранее выполнить функцию ПодключитьРасширениеРаботыСФайлами()
Обратите внимание на различные варианты поведения системы при выполнения данных функций. В некоторых браузерах выполнение кода программы прерывается до закачки файлов на сервер (например, пользователю выводится окно с процентами закачки файла), а в некоторых – выполнение программы продолжается, а загрузка производится фоново.
Для примеров использован текстовый файл на локальной «клиентской» машине по адресу «D:\Текстовый файл.txt» со следующим содержимым:
Привет, мир!
Конец файла
Пример 1. Чтение текстового файла на сервере. Имя файла выбирает пользователь/указывает программист
&НаКлиенте
Процедура КнопкаЧтениеФайла(Команда)
//для веб-клиента требуется дополнительно подключение расширения работы с файлами
#Если ВебКлиент Тогда
Результат = ПодключитьРасширениеРаботыСФайлами();
//если подключить не удалось - требуется установить его (в первый раз)
Если не Результат Тогда
//устанавливаем
УстановитьРасширениеРаботыСФайлами();
//если не удалось установить - то повторный вызов подключения будет неудачный
Если не ПодключитьРасширениеРаботыСФайлами() Тогда
//сообщаем об ошибке и прерываем работу программы
ВызватьИсключение "Ошибка. Ваш браузер не поддерживает работу с файлами.";
КонецЕсли;
КонецЕсли;
#КонецЕсли
//перемещаем файл на сервер во "внутреннее хранилище сервера"
ВнутреннийАдресСервера = "";
//если имя файла выбирает пользователь в стандартном диалоговом окне Windows
Результат = ПоместитьФайл(ВнутреннийАдресСервера);
//если имя файла указывает программист напрямую
//Результат = ПоместитьФайл(ВнутреннийАдресСервера, "D:\Текстовый файл.txt",, Ложь);
Если не Результат Тогда
ВызватьИсключение "Ошибка. Не удалось передать файл на сервер. Операция прервана.";
КонецЕсли;
Сообщить(ВнутреннийАдресСервера);
//переводим выполнение на сервер вызовом серверной процедуры
ЧтениеФайла(ВнутреннийАдресСервера);
КонецПроцедуры
&НаСервере
Процедура ЧтениеФайла(ВнутреннийАдресСервера)
//получаем файл из "временного хранилища сервера" и сохраняем во временный файл на сервере
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
ПолучитьИзВременногоХранилища(ВнутреннийАдресСервера).Записать(ИмяВременногоФайла);
Сообщить(ИмяВременногоФайла);
//начинаем работать с файлом
//узнаем размер файла в байтах (и переведем размер в мегабайты)
Файл = Новый Файл(ИмяВременногоФайла);
Сообщить(Строка(Окр(Файл.Размер() /1024 /1024, 2)) + "Мб");
//прочитаем первую строку файла
ТекстовыйФайл = Новый ЧтениеТекста(ИмяВременногоФайла);
ТекстПервойСтрокиФайла = ТекстовыйФайл.ПрочитатьСтроку();
Сообщить(ТекстПервойСтрокиФайла);
ТекстовыйФайл.Закрыть();
КонецПроцедуры
1с возвращает:
e1cib/tempstorage/ad728cdf-fce4-4c50-b348-87d5265a57a6
C:\Users\ИмяПользователяWindows\AppData\Local\Temp\v8_BE51_59.tmp
0Мб
Привет, мир!
Пример 2. Передача на сервер нескольких файлов. Имена файлов выбирает пользователь/указывает программист
&НаКлиенте
Процедура КнопкаЧтениеФайла(Команда)
//для веб-клиента требуется дополнительно подключение расширения работы с файлами
#Если ВебКлиент Тогда
Результат = ПодключитьРасширениеРаботыСФайлами();
//если подключить не удалось - требуется установить его (в первый раз)
Если не Результат Тогда
//устанавливаем
УстановитьРасширениеРаботыСФайлами();
//если не удалось установить - то повторный вызов подключения будет неудачный
Если не ПодключитьРасширениеРаботыСФайлами() Тогда
//сообщаем об ошибке и прерываем работу программы
ВызватьИсключение "Ошибка. Ваш браузер не поддерживает работу с файлами.";
КонецЕсли;
КонецЕсли;
#КонецЕсли
//перемещаем файл на сервер во "внутреннее хранилище сервера"
МассивВнутреннихАдресовСервера = Новый Массив;
//если список имен файлов выбирает пользователь
Результат = ПоместитьФайлы(,МассивВнутреннихАдресовСервера);
//если список имен файлов указывает программист напрямую
//МассивВнутреннихАдресовСервера = Новый Массив;
//МассивИменФайлов = Новый Массив;
//МассивИменФайлов.Добавить(Новый ОписаниеПередаваемогоФайла("D:\Текстовый файл.txt", ""));
//Результат = ПоместитьФайлы(МассивИменФайлов, МассивВнутреннихАдресовСервера,, Ложь);
Если не Результат или МассивВнутреннихАдресовСервера.Количество() = 0 Тогда
ВызватьИсключение "Ошибка. Не удалось передать файл на сервер. Операция прервана.";
КонецЕсли;
Для каждого ИмяФайла из МассивВнутреннихАдресовСервера Цикл
Сообщить(ИмяФайла.Хранение);
//переводим выполнение на сервер вызовом серверной процедуры
//реализацию этой функции см. в примере 1
ЧтениеФайла(ИмяФайла.Хранение);
КонецЦикла;
КонецПроцедуры
Пример 3. Запись нового файла на сервере с последующей передачей на клиент. Имя файла выбирает пользователь/формирует программист
&НаКлиенте
Процедура КнопкаЧтениеФайла(Команда)
//для веб-клиента требуется дополнительно подключение расширения работы с файлами
#Если ВебКлиент Тогда
Результат = ПодключитьРасширениеРаботыСФайлами();
//если подключить не удалось - требуется установить его (в первый раз)
Если не Результат Тогда
//устанавливаем
УстановитьРасширениеРаботыСФайлами();
//если не удалось установить - то повторный вызов подключения будет неудачный
Если не ПодключитьРасширениеРаботыСФайлами() Тогда
//сообщаем об ошибке и прерываем работу программы
ВызватьИсключение "Ошибка. Ваш браузер не поддерживает работу с файлами.";
КонецЕсли;
КонецЕсли;
#КонецЕсли
//вызов серверной процедуры формирования файла, она возвращает "внутренний адрес", передаем его параметром
//куда сохранил пользователь файл и сохранил ли - мы не знаем
//пользователь всегда подтверждает разрешение на получение файла
ПолучитьФайл(ФормированиеФайла());
//вариант с сохранением файла без подтверждения пользователя, имя файла указываем сразу, в веб-клиенте работать не будет
//ПолучитьФайл(ФормированиеФайла(), "D:\Текстовый файл.txt", Ложь);
КонецПроцедуры
&НаСервере
Функция ФормированиеФайла()
//получаем файл из "временного хранилища сервера" и сохраняем во временный файл на сервере
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
//начинаем работать с файлом
//записываем текст в файл
ТекстовыйФайл = Новый ЗаписьТекста(ИмяВременногоФайла);
ТекстовыйФайл.ЗаписатьСтроку("Привет, мир!");
ТекстовыйФайл.ЗаписатьСтроку("Конец файла");
ТекстовыйФайл.Закрыть();
//помещаем во "временное хранилище сервера", система вернет "внутренний адрес"
Возврат ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла));
КонецФункции
Пример 4. Передача файла на сервер, изменение и возврат на клиент
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.