Имя: Пароль:
1C
1С v8
http-сервис не может извелечь файлы из архива.
0 ikea
 
29.06.26
14:35
Дано: 1С 8.3.24.1368 файловая база, обычные формы. В ней опубликован http-сервис на apache 2.4
Http-сервис получает данные, вызывает общий модуль (галочки стоят "сервер" и "клиент обычное приложение", "вызов сервера"). В нем следующий код:

Поток = Новый ПотокВПамяти();    
ДД = Base64Значение(Данные);
ДД.Записать(Поток);
    
Каталог = КаталогВременныхФайлов();            

Архив  = Новый ЧтениеZipФайла(Поток, Пароль);    
    
Если Архив.Элементы.Количество() = 0 Тогда
     Возврат Неопределено;
КонецЕсли;
    
Архив.Извлечь(Архив.Элементы[0], Каталог, РежимВосстановленияПутейФайловZIP.НеВосстанавливать);
ПолноеИмяФайла = Каталог + Архив.Элементы[0].Имя;
Архив.Закрыть();  

При попытке выполнения Архив.Извлечь()  вываливается в исключение.

Права на КаталогВременныхФайлов() полные.
Код рабочий - если запустить под пользователем, все работает.
Тот же http-сервис двоичные данные в архив записать может.
Т.е. следующий код работает:

ДД = Base64Значение(Данные);
ПутьАрхива = КаталогВременныхФайлов() + "temp_archive.zip";
ДД.Записать(ПутьАрхива);

Может есть у кого мысли куда копать?
1 maxab72
 
29.06.26
14:37
А какой текст ошибки возвращает исключение?
2 Галахад
 
гуру
29.06.26
14:40
Может не успевает записать?
3 ikea
 
29.06.26
14:44
(1) ОписаниеОшибки() возвращает "".
4 maxab72
 
29.06.26
14:45
значит ошибка где-то не внутри 1с. например, пароль к архиву кривой, или архив содержит файлы в папках, и есть с одинаковыми именами, а ты разархивируешь без структуры и т.п.
5 ikea
 
29.06.26
14:47
(2) Архив же успевает записать.
Пробовал смотреть через отладчик. Там-то времени точно должно хватить.
6 ikea
 
29.06.26
14:48
(4) Скопировал весь код во внешнюю обработку, запустил под обычным пользователем. Все работает отлично.
7 maxab72
 
29.06.26
14:55
(6) а попробуй заменить ЧтениеZIPфайла на ЧтениеФайлаАрхива
8 arsik
 
гуру
29.06.26
14:59
(0) Так у тебя в КаталогВременныхФайлов() уже есть наверно файлы с именами из архива.
9 Tatitutu
 
29.06.26
15:27
там в справке обидное написано

ЧтениеZipФайла (ZipFileReader)
На основании имени файла
Не рекомендуется использовать, начиная с версии 8.3.26.
10 arsik
 
гуру
29.06.26
15:30
+ (8) Архив.Извлечь(Архив.Элементы[0], Каталог, РежимВосстановленияПутейФайловZIP.НеВосстанавливать);
Тут еще пароль надо, если у тебя архив с паролем
11 ikea
 
29.06.26
15:34
(4) Был прав. Спасибо большое за наводку!
Все дело было в пароле, а точнее в ДЛИНЕ пароля.
Длину пароля больше 12 символов http-сервис не переваривает.
Ошибка? Это не ошибка, это системная функция.