Имя: Пароль:
1C
1С v8
Как удалять созданные файлы на сервере в WEB-клиенте?
0 DES
 
25.01.21
16:15
Клиент загружает файл на сервер, сервер его обрабатывает и формирует файл ответа (при этом создает и удаляет промежуточные временные файлы).
Клиент скачивает файл ответа.
Как затем удалить этот файл (из каталога временных файлов) ?
По расширению, при входе, удалять нельзя, так как могут существовать еще не скаченные другими клиентами подобные файлы.
1 Жан Пердежон
 
25.01.21
16:23
какими другими? какому расширению? у тебя полное имя файла есть - его и удаляй
2 DES
 
25.01.21
16:25
Не хочет клиент удалять файлы на сервере ни по полному ни по укороченному имени
3 DES
 
25.01.21
16:26
А сервер не знает скачал клиент файл и можно ли его грохать.
4 acht
 
25.01.21
16:28
(3) А клиент знает - скачал ли он файл?
5 DES
 
25.01.21
16:32
нет, но то что начал качать известно
6 arsik
 
гуру
25.01.21
16:32
(0) Зачем ты вообще файлы на сервере создаешь? Делай все в памяти, 1с нормально с потоками работает. Отдавай клиенту поток.
7 acht
 
25.01.21
16:36
(5) Тогда твоя задача не имеет решение кроме таймаута - вести список файлов и, например, через сутки удалять протухшие.
8 fisher
 
25.01.21
16:37
(0) Получается, ты асинхронные запросы реализовал? Клиент периодически проверяет наличие файла-ответа?
9 fisher
 
25.01.21
16:42
И файлы ты не через временное хранилище передаешь а как-то иначе?
10 DES
 
25.01.21
16:47
Асинхронно, 8.3.18
(7) да , была мысля так сделать, надеялся что есть фича какая то.
11 fisher
 
25.01.21
17:08
(10) Клиентом файл скачивается каким способом?
12 Kassern
 
25.01.21
17:17
(0) давай людям ссылку на скачивание и предупреждай что она будет доступна в течении Nого времени. По прошествии этого времени удаляй файл регламентно.
13 acht
 
25.01.21
17:30
(12) > 8.3.18
НачатьПолучениеФайловССервера

Вариант синтаксиса: Без диалога

Синтаксис:
НачатьПолучениеФайловССервера(<ОписаниеОповещенияОЗавершении>, <ПолучаемыеФайлы>, <БазовыйКаталог>, <ПараметрыПолученияАрхиваФайлов>)

Параметры:
<ОписаниеОповещенияОЗавершении> (необязательный)

Тип: ОписаниеОповещения.
Содержит описание процедуры, которая будет вызвана после завершения со следующими параметрами:
<ПолученныеФайлы> – массив объектов типа ОписаниеПереданногоФайла.
<ДополнительныеПараметры> – значение, которое было указано при создании объекта ОписаниеОповещения.
14 acht
 
25.01.21
17:31
Так что в (5) ты наврад
15 acht
 
25.01.21
17:31
л =)
16 Жан Пердежон
 
25.01.21
17:51
(13) он вообще нигде ни разу не сказал, как он файлы получает, но ни в одном из способов такой проблемы быть не должно (если специально не постараться)
17 acht
 
25.01.21
18:00
(16) Ды я вообще думал, что это не в 1С
18 DES
 
25.01.21
19:50
Вопрос не в способе передачи, а в зачистке мусора.
19 DES
 
25.01.21
19:51
использую
ПолучитьФайлССервераАсинх(АдресХранилища, РезультатФайлXLS, ПараметрыДиалога)
20 DES
 
25.01.21
20:08
А как изменить каталогвременныхфайлов  сервера ?
чтобы не использовалось c:\windows\temp
21 DES
 
25.01.21
20:20
(13) Это требует установки расширения в браузер. Не хотелось бы.
22 Garykom
 
гуру
25.01.21
21:18
(0) хранить статус скачивания файла, обновлять его, скачанные по прошествии времени удалять
23 acht
 
25.01.21
23:41
(20) > каталогвременныхфайлов  сервера ?
(21) >  расширения в браузер.
Ты определись там - клиент, сервер...
24 acht
 
25.01.21
23:45
(21)+ Ты точно читал СП, или выборочно проглядел?
25 fisher
 
26.01.21
10:41
(19) Может, я чего-то не понимаю. Но почему ты не прибиваешь временный файл сразу после помещения его во временное хранилище?
26 DES
 
26.01.21
12:00
(25)
если так делаю то он не скачивается
&НаСервере
Функция ПолучитьАдресФайлаДляСкачивания()
    Перем ВремХран;
    
    ВремХран = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(РезультатФайлXLS));
    //УдалитьФайлыАсинх(РезультатФайлXLS);
    Возврат ВремХран;  

КонецФункции
27 DES
 
26.01.21
12:02
&НаКлиенте
Процедура ВыполнитьДействиеЗавершение(Результат, ДополнительныеПараметры) Экспорт
    
    Если Результат = Неопределено Тогда
        Возврат;
    КонецЕсли;
    Если Результат.Статус="Выполнено" Тогда  
        РезультатФайлXLS = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
        ЭтаФорма.Элементы.НадписьПояснение.Заголовок = "Выполнено.";
        ЭтаФорма.Элементы.НадписьПояснение.ЦветТекста = WebЦвета.Зеленый;
        АдресХранилища = ПолучитьАдресФайлаДляСкачивания();
        ПараметрыДиалога = Новый ПараметрыДиалогаПолученияФайлов;
        ПараметрыДиалога.Заголовок = НСтр("ru = 'Выберите путь для сохранения файла'; en = 'Select the path to save the file'");
        ПолучитьФайлССервераАсинх(АдресХранилища, СтрЗаменить(ИмяФайлаPDF,".pdf",".xlsx"), ПараметрыДиалога);
    КонецЕсли;
    
КонецПроцедуры
28 fisher
 
26.01.21
12:26
(26) ВремХран = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(РезультатФайлXLS), УникальныйИдентификатор);
29 fisher
 
26.01.21
12:29
"В случае, если передается УникальныйИдентификатор формы или адрес в хранилище, то значение будет автоматически удалено после закрытия этой формы."
"Если параметр не указан, помещенное значение будет удалено после очередного запроса сервера из общего модуля, при контекстном и неконтекстном серверном вызове из формы, при серверном вызове из модуля команды или при получении формы"
30 DES
 
26.01.21
14:56
(29) УникальныйИдентификатор никак не влияет на РезультатФайлXLS
а мне необходимо удалять файл по адресу РезультатФайлXLS
31 fisher
 
26.01.21
15:00
(30) Ты не понял. Если ты не привязываешь время жизни временного хранилища ко времени жизни формы (указав уникальный идентификатор формы вторым параметром), то временное хранилище просто "слетает" после вызова УдалитьФайлыАсинх().
32 DES
 
26.01.21
15:38
если раскомментирую удаление, то вышибает
На сервере 1С:Предприятия произошла неисправимая ошибка. Приложение будет закрыто

&НаСервере
Функция ПолучитьАдресФайлаДляСкачивания(РезультатФайлXLS, Уник) //Уник=ЭтаФорма.УникальныйИдентификатор (059aa38a-cd5c-4692-a6ee-18efa17b828c)
   Перем ВремХран;
    
    ВремХран = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(РезультатФайлXLS), Уник);
    //УдалитьФайлыАсинх(РезультатФайлXLS);
    Возврат ВремХран;  
    
КонецФункции

Если делаю //УдалитьФайлыАсинх(РезультатФайлXLS); то все выполняется без ошибок
33 fisher
 
26.01.21
15:43
(32) "Работа с файлами в асинхронном режиме присутствует только на стороне клиентского приложения. В общем случае следует использовать синхронные методы для работы на стороне сервера и асинхронные ‑ для работы на стороне клиентского приложения."
34 fisher
 
26.01.21
15:46
Короче, попробуй просто синхронное УдалитьФайлы()
35 DES
 
26.01.21
15:46
(34) верно, ФайлыАсинх(РезультатФайлXLS);
сработало
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс