vue+Express+express-fileupload+jsonserver+element实现图片上传,并存放到指定位置的详细方法
时间: 2023-09-23 07:11:22 浏览: 111
详细方法如下:
1. 在Vue项目中安装Element UI和Axios:
```bash
npm install element-ui axios
```
2. 在Vue项目的入口文件(通常是main.js)中引入Element UI和Axios:
```javascript
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import axios from 'axios';
import App from './App.vue';
Vue.use(ElementUI);
Vue.prototype.$http = axios;
new Vue({
render: h => h(App),
}).$mount('#app');
```
3. 创建一个Vue组件,用于实现图片上传的功能。你可以使用Element UI的上传组件:
```vue
<template>
<div>
<el-upload
class="upload-demo"
action="/api/upload"
:before-upload="beforeUpload"
:on-success="onSuccess"
:file-list="fileList"
multiple
>
<el-button size="small" type="primary">点击上传</el-button>
</el-upload>
</div>
</template>
<script>
export default {
data() {
return {
fileList: []
};
},
methods: {
beforeUpload(file) {
// 在上传之前的操作,比如限制文件类型和大小
},
onSuccess(response, file, fileList) {
// 上传成功后的操作
// response为服务器返回的响应数据,可以根据需要进行处理
}
}
};
</script>
```
4. 在Express项目中安装express、express-fileupload和json-server:
```bash
npm install express express-fileupload json-server
```
5. 创建一个Express路由,用于处理图片上传的请求:
```javascript
const express = require('express');
const fileUpload = require('express-fileupload');
const path = require('path');
const fs = require('fs');
const app = express();
// 启用express-fileupload中间件
app.use(fileUpload());
// 处理图片上传的请求
app.post('/api/upload', (req, res) => {
if (!req.files || Object.keys(req.files).length === 0) {
return res.status(400).send('No files were uploaded.');
}
// 获取上传的文件
const sampleFile = req.files.file;
// 创建存储路径
const uploadPath = path.join(__dirname, 'uploads');
if (!fs.existsSync(uploadPath)) {
fs.mkdirSync(uploadPath);
}
// 将文件保存到指定位置
sampleFile.mv(path.join(uploadPath, sampleFile.name), (err) => {
if (err) {
return res.status(500).send(err);
}
// 返回上传成功的信息
res.send('File uploaded!');
});
});
// 启动服务器
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
```
6. 创建一个db.json文件,用于存储上传成功的图片信息:
```json
{
"images": []
}
```
7. 启动json-server,用于模拟数据的请求和响应:
```bash
json-server --watch db.json --port 4000
```
现在,你就可以在Vue应用中使用这个上传组件,并将上传成功的图片信息存储到db.json文件中了。上传的图片将会保存在Express项目根目录下的uploads文件夹中。记得修改存储路径和json-server的端口号,以适应你的项目需求。
阅读全文