承接上个话题 后端如何接收到图片并将图片存到数据库 并保存地址信息呢
时间: 2024-03-10 10:43:26 浏览: 20
后端在接收到上传的图片后,可以将图片存储到本地磁盘或者云端存储服务中,同时将图片的地址信息存储到数据库中,方便后续的访问和展示。
下面是一个示例代码,假设使用 Node.js 和 MongoDB 进行开发:
```javascript
const express = require('express');
const multer = require('multer');
const mongoose = require('mongoose');
const fs = require('fs');
const path = require('path');
const app = express();
// 连接 MongoDB 数据库
mongoose.connect('mongodb://localhost:27017/mydb', {
useNewUrlParser: true,
useUnifiedTopology: true
}).then(() => {
console.log('MongoDB connected');
}).catch((err) => {
console.error(err);
});
// 定义图片模型
const imageSchema = new mongoose.Schema({
name: String,
path: String,
size: Number,
type: String,
createdAt: { type: Date, default: Date.now }
});
const Image = mongoose.model('Image', imageSchema);
// 配置 multer 中间件用于上传图片
const upload = multer({
dest: 'uploads/',
limits: {
fileSize: 1024 * 1024 * 2 // 限制上传文件的大小为 2MB
}
});
// 处理图片上传请求
app.post('/api/upload', upload.single('file'), (req, res) => {
const file = req.file;
// 将文件保存到数据库中
const image = new Image({
name: file.originalname,
path: file.path,
size: file.size,
type: file.mimetype
});
image.save().then(() => {
console.log('Image saved to database');
}).catch((err) => {
console.error(err);
});
res.send({
code: 0,
message: '上传成功',
data: {
url: `/uploads/${file.filename}`
}
});
});
// 处理图片访问请求
app.get('/uploads/:filename', (req, res) => {
const filename = req.params.filename;
const filePath = path.join(__dirname, 'uploads', filename);
const stream = fs.createReadStream(filePath);
stream.pipe(res);
});
app.listen(3000, () => {
console.log('Server started on http://localhost:3000');
});
```
在上面的代码中,我们使用了 multer 中间件来处理文件上传请求,将上传的图片保存到本地磁盘的 `uploads` 目录下,并将图片的地址信息保存到 MongoDB 数据库中。同时,我们还提供了一个路由来处理图片访问请求,将图片的二进制数据通过流的方式返回给客户端。
需要注意的是,这里的示例代码只是一个简单的实现,生产环境中需要根据实际情况进行优化和改进,例如加入图片的压缩、水印等功能。