vue 下载模版文件

使用axios下载blob文件及Spring接口实现

 从后台接口中返回的类型是 blob

download() {
        let params = {

        }
        this.$axios({
            method: 'get',
            responseType: 'blob', //防止返回乱码
            url: this.baseUrl + '/download/template',
            params: params
        }).then(res => {
            if (res.status == '200') {
                // downloadFile (data, name)
                let data = res.data;
                if (!data) {
                    this.$message.error('下载失败,解析数据为空!')
                    return
                }
                // const datetime = Date.now();
                // 创建一个新的url,此url指向新建的Blob对象
                let url = window.URL.createObjectURL(new Blob([data]))

                // 创建a标签,并隐藏改a标签
                let link = document.createElement('a')
                link.style.display = 'none'

                let fileName = 'test' + '.xlsx'
                document.body.appendChild(link);

                // a标签的href属性指定下载链接
                link.href = url

                // 或者用setAttribute() 方法添加指定的属性,并为其赋指定的值。
                link.download = fileName

                link.click();
                link.remove();
            } else {
                this.$message.error('导出失败,请尝试重新导出');
            }
        });
    },

spring 接口

    @ApiOperation(value = "获取模版")
    @GetMapping("/dl/template")
    public void downloadExcel() {
        try {
            //获取文件的路径
            String tplUrl = "";
            ResponseEntity<byte[]> reportEntity = null;

            InputStream reportStream = new ByteArrayInputStream(reportEntity.getBody());

            // 设置输出的格式
            servletResponse.reset();
            servletResponse.setContentType("bin");
            servletResponse.addHeader("Content-Disposition",
                    "attachment;filename=" + URLEncoder.encode("test.xls", "UTF-8"));
            // 循环取出流中的数据
            byte[] b = new byte[200];
            int len;
            while ((len = reportStream.read(b)) > 0) {
                servletResponse.getOutputStream().write(b, 0, len);
            }
            reportStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 

下载或获取 Vue 项目模板资源的方式有多种,具体取决于你的需求,例如是否需要基于特定的 UI 框架(如 Element Plus、Vant)、构建工具(如 Vite、Vue CLI)或是否需要集成 TypeScript、状态管理工具(如 Pinia)等功能。 以下是一些常见的获取 Vue 模板资源的途径和方法: ### 1. 使用 Vue 官方工具创建模板 可以使用 `Vue CLI` 或 `Vite` 快速生成 Vue 项目模板,适用于大多数开发场景。例如: #### 使用 Vue CLI 创建项目 ```bash npm install -g @vue/cli vue create my-project cd my-project npm run serve ``` #### 使用 Vite 创建 Vue 3 项目 ```bash npm create vite@latest my-project -- --template vue cd my-project npm install npm run dev ``` 这些命令将生成一个基础的 Vue 项目结构,支持现代前端开发所需的模块化、打包、热更新等功能 [^3]。 --- ### 2. 从开源平台获取 Vue 模板 许多开源平台提供了丰富的 Vue 模板资源,用户可以直接下载或克隆使用,例如: - **GitHub/Gitee**:搜索关键词如 `vue admin template`、`vue mobile template` 等,可找到大量高质量的开源项目。 - **Gitee 开源模板**:一些国内开发者分享的模板资源,例如基于 `vue-cli4 + vant UI + rem` 的移动端开发模板 [^1]。 - **Vue Element Admin**:一个基于 Vue 和 Element UI 的后台管理系统模板,集成了路由、权限控制、Mock 数据等功能 [^3]。 --- ### 3. 使用在线模板网站 一些网站专门提供 Vue 模板资源下载,例如: - **Vue 模板网站**:提供多种页面组件模板,如表格、布局、登录页等,适合快速搭建前端页面 [^2]。 - **DCloud 插件市场**:提供 H5、小程序等多端兼容的 Vue 模板资源,适合跨平台开发。 --- ### 4. 自定义模板打包与复用 如果已有项目结构,可以将其封装为模板,便于后续快速复用。例如: #### 将现有项目打包为模板 ```bash # 使用 vue-cli-service 提供的工具打包 vue-cli-service build --modern ``` 也可以将项目结构上传至私有 Git 仓库,通过 `vue create` 或 `vite` 的 `--template` 参数进行初始化 [^3]。 --- ### 5. 获取静态资源文件Vue 项目中,如果需要从 `/public/static/` 等目录加载静态资源,可以使用 `require.context` 动态加载文件,例如: ```javascript const requireContext = require.context('../../../public/static/image/', false, /^\.\/.*$/); requireContext.keys().forEach(key => { let file = key.substring(2); this.imageList.push('../../../static/image/' + file); }); ``` 这种方式适用于图片、文档等不常变动的静态资源加载 [^5]。 --- ### 6. 项目中集成状态管理 在 Vue 项目中集成 `Vuex` 或 `Pinia` 可以更好地管理全局状态。例如在 `main.js` 中引入 `store` 并挂载到 Vue 实例: ```javascript import Vue from 'vue' import App from './App.vue' import router from './router' import store from './store' import axios from 'axios' Vue.prototype.$http = axios; new Vue({ router, store, render: h => h(App) }).$mount('#app') ``` 在组件中调用 store 的方法: ```javascript this.$store.dispatch('Login', this.loginForm); ``` 这种方法适用于需要全局状态管理的中大型项目 [^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值