UNPKG

rcu-express

Version:
90 lines (87 loc) 2.37 kB
// src/index.ts import { JsonStoreProvider, RCUService } from "rcu-back-core"; // src/handler.ts import { Router } from "express"; import { ZodError, z } from "zod"; import multer from "multer"; var uploadStatusSchema = z.object({ fileId: z.string().min(1), chunkCount: z.coerce.number() }); var uploadSchema = z.object({ fileId: z.string().min(1), chunkNumber: z.coerce.number(), originalFilename: z.string().min(1), chunkCount: z.coerce.number(), chunkSize: z.coerce.number(), fileSize: z.coerce.number(), file: z.instanceof(Buffer) }); function handler(service, config) { const { uploadStatusPath = "/uploadStatus", uploadPath = "/upload" } = config ?? {}; const multerUpload = multer(); const router = Router(); router.get(uploadStatusPath, async (req, res) => { try { const query = uploadStatusSchema.parse(req.query); const response = await service.uploadStatus(query); return res.json(response); } catch (error) { if (error instanceof ZodError) { return res.status(400).send({ message: "Invalid parameter" }); } return res.status(500).json({ message: "Internal server error" }); } }); router.post( uploadPath, multerUpload.single("file"), async (req, res, next) => { try { const dto = await uploadSchema.parse({ ...req.body, file: req.file?.buffer }); const response = await service.upload(dto); return res.json(response); } catch (error) { if (error instanceof ZodError) { return res.status(400).send({ message: "Invalid parameter" }); } return res.status(500).json({ message: "Internal server error" }); } } ); return router; } // src/index.ts import { JsonStoreProvider as JsonStoreProvider2, StoreProviderInterface, Upload, RCUConfig as RCUConfig2 } from "rcu-back-core"; function resumableChunkUpload(config = {}) { const { store = new JsonStoreProvider("./tmp/rcu.json"), tmpDir = "./tmp", outputDir, onCompleted } = config; return handler( new RCUService({ store, tmpDir, outputDir: outputDir ?? tmpDir, onCompleted }), config ); } export { JsonStoreProvider2 as JsonStoreProvider, RCUConfig2 as RCUConfig, StoreProviderInterface, Upload, resumableChunkUpload };