Files
markdownblog/src/app/api/admin/exportlocal/route.ts
2025-06-21 17:48:29 +02:00

48 lines
1.4 KiB
TypeScript

import tar from 'tar';
import { NextResponse } from 'next/server';
import { statSync, createReadStream, existsSync } from 'fs';
import path from 'path';
import { gzip } from 'zlib';
// This is the route for exporting posts when using the local production server
// If you try this on the docker server, it will fail because the posts directory is not on the docker server
export async function GET() {
try {
const localDir = 'posts';
const tarballName = 'local-export.tar.gz';
const tarballPath = path.join('/tmp', tarballName);
if (!existsSync(localDir)) {
return NextResponse.json({ error: `${localDir} directory does not exist` }, { status: 400 });
}
await tar.c(
{
gzip: true,
file: tarballPath,
cwd: path.dirname(localDir),
portable: true,
noMtime: true,
},
[path.basename(localDir)]
);
const stat = statSync(tarballPath);
const stream = createReadStream(tarballPath);
return new Response(stream as any, {
status: 200,
headers: {
'Content-Type': 'application/gzip',
'Content-Disposition': `attachment; filename="${tarballName}"`,
'Content-Length': stat.size.toString(),
},
});
} catch (error) {
console.error('Error exporting local:', error);
return NextResponse.json({ error: 'Error exporting local' }, { status: 500 });
}
}