fix(materials): картинки материалов отдаются публично (рендер/открытие/скачивание)
/api/files/:id/download требует Bearer-заголовок, поэтому <img>, переход по
ссылке и «Скачать» для сохранённых картинок ломались (битое изображение,
клик не открывал). Теперь личные картинки складываются в uploads/materials и
отдаются статикой (как flashcards): POST /api/files/personal возвращает
{ url:'/uploads/materials/<file>' }. board-clip, material-save, textbook-clip
и рисовалка в my-materials сохраняют этот публичный url.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -21,7 +21,7 @@
|
||||
const fd = new FormData();
|
||||
fd.append('file', blob, name);
|
||||
const up = await LS.uploadMaterialFile(fd);
|
||||
return LS.downloadFileUrl(up.id);
|
||||
return up.url;
|
||||
}
|
||||
|
||||
async function persist(meta, kind, url) {
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
const fd = new FormData();
|
||||
fd.append('file', o.blob, o.name || 'image.png');
|
||||
const up = await LS.uploadMaterialFile(fd);
|
||||
url = LS.downloadFileUrl(up.id);
|
||||
url = up.url;
|
||||
}
|
||||
if (!url) throw new Error('Нет изображения');
|
||||
await LS.saveMaterial({ kind: 'image', title: o.title || '', url: url, sourceTitle: o.sourceTitle || null });
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
await LS.saveMaterial({
|
||||
kind: 'image',
|
||||
title: input.value.trim() || sectionTitle(),
|
||||
url: LS.downloadFileUrl(up.id),
|
||||
url: up.url,
|
||||
sourceTitle: chapterTitle()
|
||||
});
|
||||
toast('Сохранено в «Мои материалы»', 'success');
|
||||
|
||||
@@ -380,7 +380,7 @@
|
||||
if (!blob) throw new Error('Не удалось сохранить рисунок');
|
||||
const fd = new FormData(); fd.append('file', blob, 'drawing.png');
|
||||
const up = await LS.uploadMaterialFile(fd);
|
||||
await LS.saveMaterial({ kind: 'image', title: o.title || 'Рисунок', url: LS.downloadFileUrl(up.id), sourceTitle: o.sourceTitle || null });
|
||||
await LS.saveMaterial({ kind: 'image', title: o.title || 'Рисунок', url: up.url, sourceTitle: o.sourceTitle || null });
|
||||
close(); load(); LS.toast('Сохранено в «Мои материалы»', 'success');
|
||||
} catch (e) { LS.toast(e.message || 'Ошибка', 'error'); btn.disabled = false; }
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user