UNPKG

will-core

Version:
100 lines (99 loc) 4.04 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.UploadRouter = void 0; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const multer_1 = __importDefault(require("multer")); const uuid_1 = require("uuid"); const will_api_1 = require("will-api"); const Responser_1 = require("../utils/Responser"); ; const EnvironmentVariable_1 = require("../utils/EnvironmentVariable"); const AttachHandler_1 = require("../handlers/AttachHandler"); const BaseRouter_1 = require("./BaseRouter"); const buddystorage = multer_1.default.diskStorage({ destination: function (req, file, cb) { let dir = path_1.default.join(EnvironmentVariable_1.UPLOAD_RESOURCES_PATH, "uploaded", "files"); if (!fs_1.default.existsSync(dir)) { fs_1.default.mkdirSync(dir, { recursive: true }); } cb(null, dir); }, filename: function (req, file, cb) { let extension = path_1.default.extname(file.originalname); let fileid = (0, uuid_1.v4)(); let filename = fileid + extension; req.params.fileid = fileid; cb(null, filename.toLowerCase()); } }); class UploadRouter extends BaseRouter_1.BaseRouter { constructor(service, dir, paramname = "filename", fileTypes, fileSize) { super(service, dir); this.fileuploader = this.buildMulter(fileTypes, fileSize); this.uploadfile = this.fileuploader.single(paramname); } buildMulter(fileTypes = /jpeg|jpg|png|pdf/, fileSize = 10 * 1024 * 1024) { return (0, multer_1.default)({ storage: buddystorage, limits: { fileSize: fileSize }, fileFilter: function (req, file, cb) { console.log("fileFilter:", file); const filetypes = fileTypes; const extname = filetypes.test(path_1.default.extname(file.originalname).toLowerCase()); const mimetype = filetypes.test(file.mimetype); if (mimetype && extname) { cb(null, true); } else { cb(new Error("Invalid file type")); } } }); } doUpload(req, res) { this.uploadfile(req, res, (err) => { if (err) { Responser_1.Responser.responseError(res, err, "upload", "file"); return; } this.doUploadFile(req, res); }); } async doUploadFile(req, res) { res.contentType('application/json'); console.log(this.constructor.name + ".doUploadFile: body", JSON.stringify(req.body)); console.log(this.constructor.name + ".doUploadFile: file", req.file); let response = new will_api_1.JSONReply(); response.head.modeling("upload", "file"); response.head.composeNoError(); try { let ctx = await this.createContext(req); ctx.params.file = req.file; let handler = new AttachHandler_1.AttachHandler(); let rs = await handler.attach(ctx); response.body = rs; res.end(JSON.stringify(response)); } catch (ex) { Responser_1.Responser.responseError(res, ex, "upload", "file"); } } } exports.UploadRouter = UploadRouter; //ex. curl -X POST http://localhost:8080/upload/file -F filename=@D:\images\birth.png -F type=IMG /* file { fieldname: 'filename', originalname: 'birth.png', encoding: '7bit', mimetype: 'image/png', destination: 'C:\\Users\\ADMIN\\AppData\\Local\\Temp\\uploaded\\files', filename: 'f51aa9e2-385b-4ae2-b024-2b65f1a5250b.png', path: 'C:\\Users\\ADMIN\\AppData\\Local\\Temp\\uploaded\\files\\f51aa9e2-385b-4ae2-b024-2b65f1a5250b.png', size: 10717 } */