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-е. | |
| Интернет-форум Краснодарского края и Краснодара |