利用express在vue2项目中通过elementui实现doc或docx类文件的上传和下载
时间: 2024-06-09 20:10:44 浏览: 141
基于vue2.x和ElementUI插件的ui项目源码.zip
首先需要安装相关依赖:
```bash
npm install --save express multer docxtemplater mammoth
```
其中,`express`是 Node.js 的一个 Web 框架,用于搭建服务器;`multer`是一个 Node.js 的中间件,用于处理文件上传;`docxtemplater`和`mammoth`是用于处理 docx 文件的库。
接下来,在 Node.js 中搭建一个 express 服务器:
```javascript
const express = require('express');
const app = express();
const multer = require('multer');
const path = require('path');
// 设置存储路径和文件名
const storage = multer.diskStorage({
destination: function(req, file, cb) {
cb(null, 'uploads/');
},
filename: function(req, file, cb) {
cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
}
});
// 上传文件的中间件
const upload = multer({ storage: storage });
// 处理上传请求
app.post('/upload', upload.single('file'), (req, res) => {
res.send(req.file);
});
// 处理下载请求
app.get('/download', (req, res) => {
const file = __dirname + '/uploads/' + req.query.filename;
res.download(file);
});
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`Server listening on port ${port}`);
});
```
在这段代码中,我们设置了一个存储路径 `uploads/`,并且在上传文件时将文件存储到该路径下。上传文件的中间件为 `multer`,并且设置了上传文件的名称为 `file`。在上传文件时,我们将文件信息返回给客户端。处理下载请求时,我们通过 `res.download()` 方法将文件发送给客户端。
接下来,我们可以在 Vue 项目中使用 element-ui 的上传组件和下载组件来实现文件的上传和下载。在上传文件时,我们需要将文件发送到我们刚才搭建的 express 服务器中,代码如下:
```vue
<template>
<div>
<el-upload
class="upload-demo"
action="http://localhost:3000/upload"
:headers="{ 'Content-Type': 'multipart/form-data' }"
:on-success="handleSuccess"
:on-error="handleError"
>
<el-button slot="trigger" size="small" type="primary">上传文件</el-button>
</el-upload>
</div>
</template>
<script>
export default {
methods: {
handleSuccess(response) {
console.log(response);
},
handleError(error) {
console.log(error);
}
}
};
</script>
```
在上传文件时,我们需要设置 `action` 属性为我们刚才搭建的 express 服务器的上传处理路由,即 `http://localhost:3000/upload`。同时,我们需要设置请求头的 `Content-Type` 为 `multipart/form-data`,以便服务器能够正确解析上传的文件。在上传成功时,我们可以通过 `on-success` 事件获取服务器返回的文件信息。
在下载文件时,我们需要将文件名发送到服务器,并通过 `res.download()` 方法将文件发送给浏览器进行下载,代码如下:
```vue
<template>
<div>
<el-button type="primary" icon="el-icon-download" @click="handleDownload">下载文件</el-button>
</div>
</template>
<script>
export default {
methods: {
handleDownload() {
window.location.href = 'http://localhost:3000/download?filename=example.docx';
}
}
};
</script>
```
在下载文件时,我们需要设置请求 URL 为 `http://localhost:3000/download`,并将文件名通过查询参数 `filename` 发送到服务器。在点击下载按钮时,我们可以通过修改浏览器的 `window.location.href` 实现文件的下载。
最后,我们需要在 express 服务器中添加处理下载请求的逻辑。在上面的代码中,我们已经添加了 `/download` 路由,但是还没有实现处理下载请求的逻辑。下面是一个简单的实现:
```javascript
// 处理下载请求
app.get('/download', (req, res) => {
const file = __dirname + '/uploads/' + req.query.filename;
res.download(file);
});
```
在处理下载请求时,我们首先获取查询参数 `filename`,然后通过 `res.download()` 方法将文件发送给浏览器进行下载。
以上就是利用 express 和 element-ui 实现 doc 或 docx 类文件上传和下载的简单示例代码。
阅读全文