|
|
http-сервис не может извелечь файлы из архива.
ikea, Timon1405, Галахад, reg0303, formista2000, zuza, Кирпич, Chameleon1980, LoreLeii, toypaul, RVN, zenik, yurikmellon2, arsik, vbus, alexxx961503, maxab72, Garykom, Доминошник, АгентБезопаснойНацио, VladZ, YFedor, viraboy, 2S, obs191, Indian, Tatitutu, banco, Lama12, Crusher, sikuda, Bad_Aleks, Vstur, p-soft, Федя Тяпкин, denk, torgm, LuckyStar, Мультук, U4Me2, Rovan, mTema32, JohnGilbert, H A D G E H O G s, Dedal, vis, palsergeich
| ☑ |
|
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-сервис не переваривает.
|
|