UNPKG

@fontoxml/fontoxml-development-tools

Version:

Development tools for Fonto.

96 lines (82 loc) 2.12 kB
import fs from 'fs-extra'; import path from 'path'; /** @typedef {import('../../src/getAppConfig.js').DevCmsConfig} DevCmsConfig */ /** * @param {DevCmsConfig} config */ function configureAssetPostRouteHandler(config) { return (req, res) => { // Get request from correct multipart let request; if (req.body.request) { request = req.body.request; } else { request = req.body; } // Might not be parsed yet due to missing Content-Type: application/json request header if (typeof request === 'string') { request = JSON.parse(request); } const type = request['type']; const folderId = request.folderId || ''; const metadata = request.metadata || {}; const file = req.files.find( (uploadedFile) => uploadedFile.fieldname === 'file' ); if (!file) { res.status(400).end(); return; } if (!file.size) { fs.unlink(file.path); res.status(400).end(); return; } const fileExtension = path.extname(file.originalname); const originalName = path.basename(file.originalname, fileExtension); const uniqueFileName = `${originalName}-${new Date().getTime()}${fileExtension}`; let filePath = path.join(folderId, uniqueFileName); const destinationFolder = path.join( config.root, 'dev-cms', 'uploads', folderId ); const absoluteFilePath = path.join( config.root, 'dev-cms', 'uploads', filePath ); if (path.sep === '\\') { filePath = filePath.replace(/\\/g, '/'); } if (folderId && folderId.indexOf('..') !== -1) { res.status(403).end(); return; } metadata.isCmsUpload = true; // Make sure destination folder is created fs.mkdirs(destinationFolder, function (error) { if (error) { res.status(500).send(error); return; } fs.move(file.path, absoluteFilePath, function (error) { if (error) { res.status(500).send(error); return; } res.status(201) .set('content-type', 'application/json; charset=utf-8') .json({ id: filePath, type, label: originalName, metadata, }); }); }); }; } export default configureAssetPostRouteHandler;