VUE 使用a标签 POST 通过文件路径 实现下载功能

 vue Element UI 前端使用

                                     a标签 post 通过文件路径 实现下载功能

1、定义按钮

 <!-- 下载文件 -->
    <el-card style="height:350px;overflow-y:auto;">
        <div> 
            <el-form>
                <el-form-item>

              <!-- 在这按钮上 调用下载函数 -->
                    <el-button size="small" type="primary" plain @click="downloadFile">确认下载</el-button>

                </el-form-item>
            </el-form>
        </div>
    </el-card>

2、实现a标签下载 函数

//下载文件
    downloadFile(){
        let url = `${fss}/dcb/getExcel`;
        let data = {
                    bmid : this.userInfo.deptId,
                    bmmc : this.userInfo.dept,
                    addStatisticalType : JSON.stringify(this.addStatisticalType),
                    reduceStatisticalType : JSON.stringify(this.reduceStatisticalType),
        };
        this.$post(url,data).then(retData => {
            let fileName = retData.returnData;    //下载文件名
            let a = document.createElement("a");
            a.download = fileName;
            a.style.display = "none";
            a.href = `${assetStatistics}/assetStatistics/`+fileName;    
            document.body.appendChild(a);
            a.click();
            URL.revokeObjectURL(a.href);    // 释放URL 对象
            document.body.removeChild(a);   // 删除 a 标签
        })
    },

注: 

         ${assetStatistics} 地址:是项目所在的服务器地址

          /assetStatistics 是在服务器上的tomcat中conf下的service.xml配置出来的路径名称

<Context path="/assetStatistics" docBase="/gxcc/oaData/assetModel/assetStatistics" debug="0" reladable="true" ></Context>

3、浏览器访问: http://localhost:8001/

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件上传: 1. 在前端页面中添加一个文件上传的组件,使用`v-model`指令绑定上传的文件对象。 ```html <template> <div> <input type="file" v-model="file"> <button @click="uploadFile">上传文件</button> </div> </template> <script> export default { data() { return { file: null, }; }, methods: { async uploadFile() { const formData = new FormData(); formData.append('file', this.file); // 调用后端接口,将文件数据通过FormData对象传递给后端 const res = await this.$http.post('/upload', formData); console.log(res); }, }, }; </script> ``` 2. 在后端实现文件上传的接口,使用`multer`中间件处理上传文件。 ```javascript const express = require('express'); const multer = require('multer'); const path = require('path'); const app = express(); // 设置上传文件的存储路径文件名 const storage = multer.diskStorage({ destination(req, file, cb) { cb(null, 'uploads/'); }, filename(req, file, cb) { const extname = path.extname(file.originalname); cb(null, `${file.fieldname}-${Date.now()}${extname}`); }, }); // 创建multer中间件实例 const upload = multer({ storage }); // 处理文件上传的接口 app.post('/upload', upload.single('file'), (req, res) => { console.log(req.file); res.json({ message: '文件上传成功' }); }); app.listen(3000, () => { console.log('Server is running on port 3000'); }); ``` 文件下载: 1. 在前端页面中添加一个下载按钮,使用`v-on:click`绑定下载文件的方法。 ```html <template> <div> <button @click="downloadFile">下载文件</button> </div> </template> <script> export default { methods: { async downloadFile() { // 调用后端接口,获取文件数据 const res = await this.$http.get('/download', { responseType: 'blob' }); // 创建Blob对象,用于下载文件 const blob = new Blob([res.data]); const url = window.URL.createObjectURL(blob); // 创建a标签,模拟点击下载 const link = document.createElement('a'); link.style.display = 'none'; link.href = url; link.setAttribute('download', 'file.txt'); document.body.appendChild(link); link.click(); // 释放URL对象 window.URL.revokeObjectURL(url); }, }, }; </script> ``` 2. 在后端实现文件下载的接口,使用`fs`模块读取文件内容,并设置响应头`Content-Disposition`,告诉浏览器下载文件。 ```javascript const express = require('express'); const path = require('path'); const fs = require('fs'); const app = express(); // 处理文件下载的接口 app.get('/download', (req, res) => { const filePath = path.join(__dirname, 'file.txt'); const fileName = path.basename(filePath); const fileStream = fs.createReadStream(filePath); // 设置响应头,告诉浏览器下载文件 res.setHeader('Content-Disposition', `attachment; filename=${fileName}`); res.setHeader('Content-Type', 'application/octet-stream'); fileStream.pipe(res); }); app.listen(3000, () => { console.log('Server is running on port 3000'); }); ``` 注意:以上代码仅供参考,具体实现可能会因为项目需求和环境差异而有所变化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值