UNPKG

onions-node

Version:

onions-node backend

70 lines (65 loc) 2.1 kB
const fs = require('fs') const express = require('express') const multer = require('multer') const {v4: uuidV4} = require('uuid') const CdnSDK = require('@razor-node/cdn-sdk') /** * 添加CDN上传路由 * @param cdnConfig * @param config * @param logger */ module.exports = (cdnConfig, config, logger) => { /*TODO: 暂只支持国内场景,国外场景待支持*/ const router = new express.Router() const storage = multer.diskStorage({ destination: cdnConfig.tempFilePath || config.tempFilePath, filename: function (req, file, cb) { const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9) cb(null, `${uniqueSuffix}-${file.originalname}`) } }) const upload = multer({ storage }) const ENV_HOST = { dev: 'https://keeper-cdn-qa.nioint.com', test: 'https://keeper-cdn-sit.nioint.com', stg: 'https://keeper-cdn-stg.nioint.com', prod: 'https://keeper-cdn.nioint.com', } const baseURL = ENV_HOST[cdnConfig.env || config.env] const cdnSDK = new CdnSDK(baseURL, cdnConfig.app_id, cdnConfig.app_secret) router.post('/rz/common/api/v1/cdn/upload', upload.single('file'), async (req, res) => { try { const file = req.file const stream = fs.createReadStream(file.path) const svgContentType = 'image/svg+xml' const cssContentType = 'text/css; charset=UTF-8' const isSVG = file.originalname.includes('.svg') const isCSS = file.originalname.includes('.css') const body = { defineFilePath: `${config.project}/upload/${uuidV4()}/${file.originalname}`, contentType: file.mimetype } if (isSVG) { body['contentType'] = svgContentType } if (isCSS) { body['contentType'] = cssContentType } const result = await cdnSDK.upload(stream, file.originalname) return res.json({ result_code: 'success', data: { url: result } }) } catch (e) { logger.error(e) return res.json({ result_code: 'fail', message: e.message }) } }) return router }