我的 Express 有问题。我做了一个文件上传系统,后端是 Express 和 Multer。
我可以完全从前端发送文件到后端,但我的问题是保存数据。
如何保存数据?
第一种方法是将文件保存为数据库中的base64数据,但这不是一个好方法,因为读取base64文件非常慢。
第二种方法是将文件保存在 Node.js 项目上传文件夹中。 我可以上传此文件夹中的文件,但如何读取该文件?我的后端 URL 是这样的:https://example.com/api/product/all.
上传文件的URL是什么?
为了帮助您,我已经从事过类似的项目以供快速参考,我将为您提供代码片段
require('dotenv').config()
const express = require('express');
const mongoose = require('mongoose');
const multer = require('multer');
const path = require('path');
const cors = require('cors');
const User = require('./models/User');
const app = express();
const port = process.env.PORT |3000;
// Connect to MongoDB
mongoose.connect(process.env.Mongodb_Uri, {useNewUrlParser: true})
.then(() => console.log('MongoDB connected'))
.catch(err => console.log(err));
// Set up multer for file uploads
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'uploads/');
},
filename: (req, file, cb) => {
cb(null, Date.now() + path.extname(file.originalname));
}
});
const upload = multer({ storage: storage });
app.use(cors());
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
// Endpoint to handle form submission
app.post('/submit', upload.single('file'), async (req, res) => {
try {
const { name, address, email } = req.body;
const filePath = req.file.path;
console.log(req)
const newUser = new User({
name,
address,
email,
filePath
});
await newUser.save();
res.send('Form data and file uploaded successfully!');
} catch (err) {
res.status(500).send('Error uploading file and form data');
}
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
这里是 multer 实现的完整代码, 点击这里