v0.0.35: при раскрытии ZIP — только документы (pdf, doc, docx, txt, md), изображения пропускаются
Deploy drhider / validate (push) Canceled after 0s
Deploy drhider / validate (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
# v0.0.35 — фильтр документов при раскрытии ZIP — 2026-08-19
|
||||
|
||||
**Дата:** 2026-08-19
|
||||
**Версия:** 0.0.34 → 0.0.35
|
||||
**Файл:** `site/templates/index.html` (фронт `listZipFiles`), `site/app.py` (версия)
|
||||
|
||||
---
|
||||
|
||||
## Суть
|
||||
|
||||
При раскрытии ZIP в таблицу ранее вытаскивались ВСЕ файлы, включая изображения
|
||||
(WhatsApp jpeg и т.п.). Теперь из ZIP извлекаются **только документы**:
|
||||
|
||||
Разрешённые расширения: `.pdf`, `.doc`, `.docx`, `.txt`, `.md`.
|
||||
|
||||
Всё прочее (jpeg, png, xls, exe и т.д.) — пропускается. Вложенные ZIP
|
||||
раскрываются рекурсивно, и фильтр применяется и к их содержимому.
|
||||
|
||||
## Изменение
|
||||
|
||||
`listZipFiles()` в `index.html`:
|
||||
```js
|
||||
const allowedExt = ['.pdf', '.doc', '.docx', '.txt', '.md'];
|
||||
...
|
||||
else if (allowedExt.some(ext => low.endsWith(ext))) {
|
||||
out.push(new File([e.data], e.name, { lastModified: e.dosMs }));
|
||||
}
|
||||
// иначе — не документ, пропускаем
|
||||
```
|
||||
|
||||
## Проверка
|
||||
- `node --check` — OK.
|
||||
- Тест на архиве с `doc.pdf, old.doc, n.docx, a.txt, r.md, pic.jpeg, pic2.png`:
|
||||
извлечены только 5 документов, jpeg/png пропущены — OK.
|
||||
|
||||
## Вопрос (отложен)
|
||||
- Нужно также упомянуть в подсказке на странице требование современного
|
||||
браузера (`DecompressionStream`: Chrome 103+, Safari 16.4+, Firefox 113+).
|
||||
+1
-1
@@ -20,7 +20,7 @@ if _sys_path_root not in sys.path:
|
||||
sys.path.insert(0, _sys_path_root)
|
||||
|
||||
# Версия приложения (меняется при изменениях)
|
||||
VERSION = "0.0.34"
|
||||
VERSION = "0.0.35"
|
||||
|
||||
|
||||
def create_app():
|
||||
|
||||
@@ -252,14 +252,18 @@ async function listZipFiles(file) {
|
||||
const buf = new Uint8Array(await file.arrayBuffer());
|
||||
const entries = await parseZip(buf);
|
||||
const out = [];
|
||||
// Из ZIP вытаскиваем только документы. Всё прочее (изображения и т.п.) пропускаем.
|
||||
const allowedExt = ['.pdf', '.doc', '.docx', '.txt', '.md'];
|
||||
for (const e of entries) {
|
||||
if (e.isDir) continue;
|
||||
if (e.name.toLowerCase().endsWith('.zip')) {
|
||||
const low = e.name.toLowerCase();
|
||||
if (low.endsWith('.zip')) {
|
||||
const sub = new File([e.data], e.name, { lastModified: e.dosMs });
|
||||
out.push(...(await listZipFiles(sub)));
|
||||
} else {
|
||||
} else if (allowedExt.some(ext => low.endsWith(ext))) {
|
||||
out.push(new File([e.data], e.name, { lastModified: e.dosMs }));
|
||||
}
|
||||
// иначе — не документ, пропускаем
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user