К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Web-клиент и загрузка файлов. Траблы.

Гость
0 - 26.03.2019 - 15:00
Приветствую коллеги!
Ситуевина. Есть самописная конфа, где есть функционал загрузки файлов в базу. В тонком клиенте все отрабатывает без проблем. Запускаю web-клиент и при попытке загрузить выбранный файл идет ошибка доступа к файлу.
https://ibb.co/D1kgk1T
https://ibb.co/MptqTDH

Не могу понять, где собака порылась?
И тонкий клиент и web-клиент работают под одной учеткой в ОС. Причем, при выборе из web-клиента, я хожу по каталогам, открываю, редактирую, сохраняю, удаляю файлы в диалоге выбора файла. Т.е. на это прав хватает, а скопировать его в базу - ошибка доступа.



Гость
1 - 27.03.2019 - 09:25
Это есть ?

В веб-клиенте работа с файлами (чтение/запись) производится только на сервере.

Функция ПодключитьРасширениеРаботыСФайлами() используется в веб-клиенте для включения разрешения работы с файлами (поддерживают не все браузеры), если неудачно – возвращает Ложь. Перед первым использованием функции в этом браузере на этом комьютере требуется установить расширение работы с файлами с помощью функции УстановитьРасширениеРаботыСФайлами()
Гость
2 - 27.03.2019 - 09:38
(1) Ну да. Установка и подключение прописаны. Иначе бы при попытке выбрать файл уже ругался бы на отсутствие расширения работы с файлами.

&НаКлиенте
Процедура ВыполнитьПодключение()

Оповещение = Новый ОписаниеОповещения("ВыполнитьПослеПодключения", ЭтотОбъект);
НачатьПодключениеРасширенияРаботыСФайлами(Оповещен ие);

КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьПослеПодключения(Подключено,Дополнительны еПараметры) Экспорт

Если НЕ Подключено Тогда
Оповещение = Новый ОписаниеОповещения("ВыполнитьПослеУстановки", ЭтотОбъект);
НачатьУстановкуРасширенияРаботыСФайлами(Оповещение );
КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьПослеУстановки(ДополнительныеПараметры) Экспорт

ВыполнитьПодключение();

КонецПроцедуры
Гость
3 - 27.03.2019 - 11:50
может файл огромный ? Более 1МБ, ковырять надо настройки и ограничения на Веб-сервере
Гость
4 - 27.03.2019 - 12:15
(3) Нет. Пробовал разные, в т.ч. маленькие (несколько кВ). Да и ошибка не про размер, а про доступ к файлу.
Причем попробовал на сервере, где SQL,1C,IIS крутятся, запустить браузер под локальным админом - та же хрень. Хотя прав при этом на все - до и бо.
5 - 27.03.2019 - 12:38
как вариант, в свойствах разрешений папки(в которой находится загружаемый файл) для группы пользователей IIS_IUSRS установить "полный доступ"
Гость
6 - 27.03.2019 - 13:52
(5) Сделал даже больше. Дал всем полные права на файл. Те же яйца, вид сбоку.
Гость
7 - 27.03.2019 - 14:25
"скопировать его в базу" с точки зрения кода и контекста его выполнения как организовано?
Гость
8 - 27.03.2019 - 15:26
(7) Код нехитрый. Но повторюсь, в тонком клиенте все отрабатывает на ура.

&НаСервере
Процедура ЗаписатьЭлемент(ПараметрыФайла)

Файл = Справочники.Файлы.СоздатьЭлемент();
Файл.Наименование = ПараметрыФайла.Имя;
Файл.ИмяФайла = ПараметрыФайла.ПолноеИмя;
Сжатие = Новый СжатиеДанных(1);
ХранилищеФайла = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(Па раметрыФайла.АдресФайлаВХранилище), Сжатие);
Файл.Хранилище = ХранилищеФайла;
Файл.Расширение = ПараметрыФайла.Расширение;
Файл.Размер = ПараметрыФайла.Размер/1024;
Файл.Записать();

КонецПроцедуры

&НаКлиенте
Процедура ВыбратьФайл(Команда)

ОповещениеОЗавершении = Новый ОписаниеОповещения(
"ВыполнитьПослеПомещенияФайла", ЭтотОбъект
);

Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие );
Диалог.Заголовок = "Выберите файл";
Диалог.ПолноеИмяФайла = "";
Диалог.ПредварительныйПросмотр = Истина;

НачатьПомещениеФайла(
ОповещениеОЗавершении,
, // адрес в хранилище
Диалог, // имя файла
Истина, // интерактивно
ЭтаФорма.УникальныйИдентификатор
);

КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьПослеПомещенияФайла(Результат, Адрес,

ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт

Если Результат Тогда

АдресФайлаВХранилище = Адрес;
ВыбФайл = Новый Файл(ВыбранноеИмяФайла);
ПараметрыФайла = Новый Структура("Имя",ВыбФайл.Имя);
ПараметрыФайла.Вставить("ПолноеИмя",ВыбранноеИмяФа йла);
ПараметрыФайла.Вставить("Расширение",ВыбФайл.Расши рение);
ПараметрыФайла.Вставить("АдресФайлаВХранилище",Адр есФайлаВХранилище);

Оповещение = Новый ОписаниеОповещения("СоздатьФайлСДискаПослеПолучени яРазмера", ЭтотОбъект, ПараметрыФайла);
ВыбФайл.НачатьПолучениеРазмера(Оповещение);

Иначе

Сообщить("Не удалось загрузить/передать файл на сервер.");

КонецЕсли;

КонецПроцедуры

&НаСервере
Процедура СоздатьФайлСДискаПослеПолученияРазмера(Размер, ДополнительныеПараметры) Экспорт

ДополнительныеПараметры.Вставить("Размер",Размер);
ЗаписатьЭлемент(ДополнительныеПараметры);

Сообщить("Файл " +
ДополнительныеПараметры.ПолноеИмя + " передан на сервер и сохранён в справочнике файлов.");
Элементы.Список.Обновить();

КонецПроцедуры
Гость
9 - 27.03.2019 - 16:12
И падает на НачатьПомещениеФайла? Правильно понимаю?
Гость
10 - 27.03.2019 - 16:50
(9) Нет. На этой строке:

ВыбФайл.НачатьПолучениеРазмера(Оповещение);
Гость
11 - 27.03.2019 - 17:24
(10) из СП НачатьПомещениеФайла()

<ВыбранноеИмяФайла> - Через этот параметр возвращается путь к файлу, указанный в диалоге выбора файла. Для неинтерактивного режима выбранное имя файла соответствует начальному имени файла. В режиме запуска "Веб-клиент" значение параметра зависит от типа браузера. Для Mozilla Firefox 3 в параметре возвращается только имя файла без пути. Для Microsoft Internet Explorer возвращаемое значение зависит от настройки текущей зоны. Подробности: http://msdn.microsoft.com/en-us/libr...28(VS.85).aspx,
Гость
12 - 27.03.2019 - 17:25
+ (11) Проверь ВыбФайл.Существует()
Гость
13 - 27.03.2019 - 17:33
(11,12) Да, спасибо. Проверю.
Гость
14 - 28.03.2019 - 15:30
(11) Вот тут-то собака и оказалась зарыта. Возвращается только имя файла. Соответственно не могу обращаться к реальному файлу по полному пути. Теперь осталось понять, как можно вытянуть путь к файлу в web-клиенте.
Гость
15 - 28.03.2019 - 15:58
(14) зачем? Раз ты его на сервер передаешь - на сервере всё необходимое и вычисли
Гость
16 - 28.03.2019 - 16:34
(15) Так я его на сервере получаю в виде ХранилищаЗначения по переданному Адресу временного хранилища. Как мне получить из этого свойства файла в виде полного пути и размера?
Гость
17 - 28.03.2019 - 17:17
Размер вычислишь. А вот полный путь - таки да, не получишь.
Не зню сработает ли в вебе, но обрати внимание на НачатьПомещениеФайлОВ. Там фишка в третьем параметре: он может принимать тип ДиалогВыбораФайла. Вот из него (возможно) можно будет и полный путь выкружить...
Гость
18 - 28.03.2019 - 17:30
(17) На полный путь пока решил забить. А размер получаю в обработчике до помещения файла. Там в "НачатьПомещениеФайла" последним параметром идет Оповещение, срабатывающее до помещения файла во временное хранилище и возвращающее ссылку на файл. Вот из нее и получаю размер. Хотя в тонком клиенте из нее можно и ПолноеИмя с путем получить, но не в web-е.


К списку вопросов






Copyright ©, Все права защищены