28 lines
914 B
TypeScript
28 lines
914 B
TypeScript
import express from "express";
|
|
import u from "@/utils";
|
|
import { z } from "zod";
|
|
import { success } from "@/lib/responseFormat";
|
|
import compressing from "compressing";
|
|
import { validateFields } from "@/middleware/middleware";
|
|
const router = express.Router();
|
|
|
|
export default router.post(
|
|
"/",
|
|
validateFields({
|
|
id: z.array(z.number()),
|
|
}),
|
|
async (req, res) => {
|
|
const { id } = req.body;
|
|
const scripts = await u.db("o_script").whereIn("id", id);
|
|
const textList = scripts.map((s) => ({ name: s.name, text: s.content }));
|
|
//压缩为zip文件
|
|
const zipStream = new compressing.zip.Stream();
|
|
textList.forEach((item) => {
|
|
zipStream.addEntry(Buffer.from(item.text!), { relativePath: `${item.name}.txt` });
|
|
});
|
|
res.setHeader("Content-Type", "application/zip");
|
|
res.setHeader("Content-Disposition", `attachment; filename=scripts.zip`);
|
|
zipStream.pipe(res);
|
|
},
|
|
);
|