case-uploads/server/index.js

84 lines
1.9 KiB
JavaScript

/*
* @Author: jukaifeng jukaifeng@lingtu.com
* @Date: 2024-10-24 09:00:33
* @LastEditors: jukaifeng jukaifeng@lingtu.com
* @LastEditTime: 2024-10-24 13:52:24
* @FilePath: /case-uploads/server/index.js
* @Description:
*/
const express = require('express');
const bodyParser = require('body-parser');
const multer = require('multer');
const { writeFileSync } = require('fs');
const { resolve } = require('path');
const app = express();
app.use(bodyParser.json({ limit: '50mb' }));
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'uploads/');
},
filename: (req, file, cb) => {
const ext = file.originalname.split('.').pop();
cb(null, file.originalname + '-' + Date.now()) + '.' + ext;
}
});
const upload = multer({ storage });
app.all('*', (req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Content-Type, x-ext');
res.header('Access-Control-Allow-Methods', 'PUT, POST');
next();
});
// multipart/form-data上传模式
app.post('/upload', upload.single('file'), (req, res) => {
if (req.file) {
res.send({
code: 'success'
});
} else {
res.send({
code: 'error'
});
}
});
// base64上传模式
app.post('/base64', (req, res) => {
const { file, ext } = req.body;
const binaryData = Buffer.from(file, 'base64');
writeFileSync(resolve(__dirname, `uploads/${Date.now()}.${ext}`), binaryData, 'binary');
res.send({
code: 'success'
});
});
// 二进制上传模式
app.post('/binary', (req, res) => {
const ext = req.headers['x-ext'];
const buffers = [];
req.on('data', (chunk) => {
buffers.push(chunk);
}).on('end', () => {
const binaryData = Buffer.concat(buffers);
writeFileSync(resolve(__dirname, `uploads/${Date.now()}.${ext}`), binaryData);
res.send({
code: 'success'
});
});
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});