文件上传
示例代码
app.js
js
// app.js
const core = require('cors');
const express = require('express');
const bodyParser = require('body-parser');
const uploadRouter = require('./routes/upload');
const app = express();
app.use(core())
app.use(bodyParser.json());
// 支持访问上传到服务器上的文件
app.use(express.static('static'));
// 挂载子路由模块
app.use('/upload', uploadRouter);
app.listen(3000, () => {
console.log(`服务已启动 http://localhost:3000`);
});routes/upload.js
js
// routes/upload.js
const multer = require('multer');
const express = require('express');
const fs = require('fs');
const path = require('path');
const { fileUpload } = require('../utils/fileUpload');
const router = express.Router();
// 单文件上传
router.post('/', fileUpload('myFile'), (req, res) => {
const file = req.file;
if (!file) {
return res.send({code: 500, msg: '没有上传的文件'});
}
res.send({code: 200, msg: '上传成功', data: {fileUrl: `http://${req.headers.host}/static/uploads/${file.filename}`}});
});
module.exports = router;utils/fileUpload.js
js
// utils/fileUpload.js
const express = require('express');
const multer = require('multer');
const fs = require('fs');
const path = require('path');
const fileUpload = (fieldName, prefix = 'uploads') => {
const storage = multer.diskStorage({
destination: function (req, file, cb) {
try {
fs.mkdirSync(path.join(process.cwd(), `static/${prefix}`), { recursive: true });
} catch (e) {};
cb(null, path.join(process.cwd(), `static/${prefix}`));
},
filename: function (req, file, cb) {
const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1e9) + '-' + file.originalname;
cb(null, file.fieldname + '-' + uniqueSuffix);
},
});
const upload = multer({ storage });
return (req, res, next) => {
upload.single(fieldName)(req, res, (err) => {
if (err) {
next(err);
return;
}
next();
});
};
};
module.exports = {
fileUpload
};