Skip to content

准备工作

  1. 创建空文件夹,控制台执行下面指令进行初始化。

    sh
    npm init
  2. 安装 express

    sh
    npm i express
  3. 安装 multer

    sh
    npm i multer
  4. 安装 body-parser

    sh
    npm i body-parser
  5. 创建 /router/file.js 文件

  6. 创建入口文件 app.js

    js
    const express = require('express');
    const bp = require('body-parser');
    const app = express();
    
    app.use(bp.urlencoded({ extended: true }));
    app.use(require('./router/file'));
    
    app.listen(3000, () => {
        console.log('服务启动成功:http://127.0.0.1:3000');
    })

编写接口

router/file.js

js
const router = require('express').Router();
const multer = require('multer');
const fs = require('fs');
const root = '/www/wwwroot/file';
const ip = 'ip';

// 上传文件
router.post('/file/up', multer({ dest: root }).single('file'), ({ body, file }, res) => {
    let { mimetype, filename } = file;
    let { type, project } = body;

    if (!type) type = 'any';
    if (!project) project = 'detault';

    let suffix = mimetype.split('/')[1];        // 后缀
    let dir = `${root}/${type}/${project}`;     // 文件目录
    
    if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });    // 判断文件目录是否存在

    fs.renameSync(`${root}/${filename}`, `${dir}/${filename}.${suffix}`);
    res.send({
        code: 200,
        msg: 'ok',
        data: `${ip}/${type}/${project}/${filename}.${suffix}`
    });
});

// 删除文件
router.post('/file/del', ({ body }, res) => {
    let data = { code: 200, msg: 'ok' };
    let { url } = body;
    if (!url) {
        data.code = 500;
        data.msg = 'url 不能为空';
    } else {
        url = url.replaceAll(ip, root);
        if (!fs.existsSync(url)) {
            data.code = 501;
            data.msg = '文件不存在';
        } else fs.rmSync(url);
    }
    res.send(data);
});

module.exports = router;

基于 MIT 许可发布