don't zip sinple page exports

This commit is contained in:
Philipinho
2026-03-29 02:02:53 +01:00
parent 388572f689
commit 2fe2c0e6c1
2 changed files with 30 additions and 9 deletions
@@ -61,7 +61,7 @@ export class ExportController {
await this.pageAccessService.validateCanView(page, user); await this.pageAccessService.validateCanView(page, user);
const zipFileStream = await this.exportService.exportPages( const result = await this.exportService.exportPages(
dto.pageId, dto.pageId,
dto.format, dto.format,
dto.includeAttachments, dto.includeAttachments,
@@ -83,15 +83,29 @@ export class ExportController {
}, },
}); });
const fileName = sanitize(page.title || 'untitled') + '.zip'; if (result.type === 'file') {
const ext = getExportExtension(dto.format);
const fileName = sanitize(page.title || 'untitled') + ext;
const contentType = getMimeType(path.extname(fileName));
res.headers({ res.headers({
'Content-Type': 'application/zip', 'Content-Type': contentType,
'Content-Disposition': 'Content-Disposition':
'attachment; filename="' + encodeURIComponent(fileName) + '"', 'attachment; filename="' + encodeURIComponent(fileName) + '"',
}); });
res.send(zipFileStream); res.send(result.content);
} else {
const fileName = sanitize(page.title || 'untitled') + '.zip';
res.headers({
'Content-Type': 'application/zip',
'Content-Disposition':
'attachment; filename="' + encodeURIComponent(fileName) + '"',
});
res.send(result.stream);
}
} }
@UseGuards(JwtAuthGuard) @UseGuards(JwtAuthGuard)
@@ -150,6 +150,13 @@ export class ExportService {
// set to null to make export of pages with parentId work // set to null to make export of pages with parentId work
pages[parentPageIndex].parentPageId = null; pages[parentPageIndex].parentPageId = null;
const isSinglePage = pages.length === 1 && !includeAttachments;
if (isSinglePage) {
const pageContent = await this.exportPage(format, pages[0], true);
return { type: 'file' as const, content: pageContent, page: pages[0] };
}
const tree = buildTree(pages as Page[]); const tree = buildTree(pages as Page[]);
const baseUrl = await this.getWorkspaceBaseUrl(pages[0].workspaceId); const baseUrl = await this.getWorkspaceBaseUrl(pages[0].workspaceId);
@@ -170,7 +177,7 @@ export class ExportService {
compression: 'DEFLATE', compression: 'DEFLATE',
}); });
return zipFile; return { type: 'zip' as const, stream: zipFile, page: pages[0] };
} }
async exportSpace( async exportSpace(