Vue下载文件的两种方法以及文件流处理

点击按钮下载文件

1.文件流形式
   pdfHeaders: {
                'Authorization': localStorage.getItem('Access-Token').replace(/"/g, ''),
                'Content-Type': 'application/json',
            },      
    
downLoad(){
             let getUrl = ''
            if (process.env.NODE_ENV === "development") {
                getUrl = `测试地址`
            } else if (process.env.NODE_ENV === "production") (
                getUrl = `生产地址`
            )
            //打开合同协议为文件流的方法
            axios({
                method: 'post',
                url: getUrl,
                data: this.formData,
                responseType: 'blob',
                headers: this.pdfHeaders,

            }).then(response => {
 let decodedString = decodeURIComponent(response.headers['content-disposition'].split(';')[1].split('=')[1]);  文件名在响应头里,需要后端设置Access-Control-Expose-Headers: Content-Disposition
                const url = window.URL.createObjectURL(new Blob([response.data]));
                const link = document.createElement('a');
                link.href = url;
                link.setAttribute('download', '协议模版.pdf'); // 设置下载的文件名
                document.body.appendChild(link); // 需要添加到文档中
                link.click(); // 触发下载
                document.body.removeChild(link); // 下载后移除链接
            })
}
2.文件为链接形式

a标签不能直接下载非同源的文件,因此需要特殊处理

     getAuthAgreementUrl(this.formData).then(res => {
                let x = new XMLHttpRequest();
                x.open("GET", res.data(链接地址), true);
                x.responseType = 'blob';
                 x.onload = function (e) {
                    var url = window.URL.createObjectURL(x.response)
                     var a = document.createElement('a');
                     a.href = url
                     a.download = '文件名';
                     a.click()
                 }
                 x.send();
             })
PS:如果有mock.js记得取消引入,mock.js会重写请求
3.Blob对象转换成String字符串
reader.onload中的定义的变量如何抛出去
第一种 在外部定义方法    
let reader = new FileReader();
                    reader.readAsText(response.data, 'utf-8');
                    reader.onload = e => {
                        this.showError(reader.result)
          }

    //报错处理
        showError(response) {
            let temp = JSON.parse(response);
            let errorMes = ''
            errorMes = temp.message
            this.errorMesShow = errorMes
            this.$message.error(this.errorMesShow)
        },



第二种Promise抛出去:
function uploadFile(file) {    
        return new Promise(function(resolve, reject) {    
        let reader = new FileReader()
        reader.readAsArrayBuffer(file)
        reader.onload = function() {
            resolve(this.result)
        }
    })
}
uploadFile(file).then(function(result){
})

<think>好的,用户想了解Vue创建的两种方法。首先我要确定用户指的是Vue.js框架的两种主要创建方式。常见的创建Vue项目的方法两种:直接通过CDN引入和使用Vue CLI脚手架工具。需要确认这两种方法是否还存在其他变体,比如Vite的出现,但用户可能指的是传统方法,所以先聚焦于CDN和CLI。 接下来,我需要详细说明这两种方法的具体步骤。对于CDN引入,需要解释如何通过HTML文件中的script标签引入Vue,并给出一个简单的示例代码,展示如何创建Vue实例和应用的基础结构。同时,要提到CDN方式的适用场景,比如快速原型开发或小型项目。 然后是Vue CLI的部分,需要说明安装过程,使用npm或yarn安装CLI工具,然后通过命令行创建项目,选择配置,并启动开发服务器。这里要注意指导用户如何操作,包括安装命令、创建项目的步骤,以及项目结构的基本介绍。还要强调CLI适合中大型项目,提供了构建工具和现代化的工作流。 另外,可能用户对Vue 3的新特性感兴趣,比如使用Vite作为构建工具,但根据问题描述,用户可能只需要基础的两种方法,所以暂时不深入Vite,除非用户后续提问。需要检查是否有其他创建方法,比如通过Vue的官方模板或者其他构建工具,但按照常规回答,CDN和CLI是最常见的两种方法。 还要确保回答结构清晰,分步骤说明,每个方法都有示例代码和适用场景的比较。同时,要使用中文,避免专业术语过多,保持易懂。需要验证LaTeX格式是否正确,不过在这个问题中可能用不上数学公式,但系统级指令中提到行内数学表达式要用$...$,所以如果有变量或代码片段,可能需要处理,但这里主要是代码块,所以应该用反引号包裹。 最后,总结两种方法的优缺点,帮助用户根据项目需求选择合适的方式。确保回答准确,没有错误信息,比如Vue CLI的安装命令是否正确,是否需要全局安装等。可能还需要提醒用户Node.js环境的准备,对于CLI方式来说,这是前提条件。检查是否有遗漏的步骤或常见问题,比如CDN引入时的版本选择,或者CLI创建时的配置选项。</think>Vue.js两种常见创建方法及详细步骤: 一、CDN 直接引入法 (适用于快速原型开发) ```html <!DOCTYPE html> <html> <head> <!-- 引入 Vue 3 CDN --> <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script> </head> <body> <div id="app"> {{ message }} <!-- 显示数据绑定 --> </div> <script> // 创建 Vue 应用实例 const { createApp } = Vue; createApp({ data() { return { message: 'Hello Vue!' // 响应式数据 } } }).mount('#app'); // 挂载到 DOM 元素 </script> </body> </html> ``` 特点: - 即插即用,无需构建步骤 - 适合学习、演示或小型功能开发 - 文件体积约 500KB (生产环境建议指定具体版本) 二、Vue CLI 脚手架创建 (推荐用于正式项目) 1. 安装 Node.js (需 ≥14.18.0) 2. 通过终端执行: ```bash npm install -g @vue/cli # 全局安装 CLI vue create my-project # 创建项目 ``` 3. 选择预设配置: ``` ? Please pick a preset: Default ([Vue 3] babel, eslint) # Vue 3 默认配置 Default ([Vue 2] babel, eslint) # Vue 2 默认配置 Manually select features # 自定义选项 ``` 4. 项目结构说明: ``` ├── node_modules/ # 依赖库 ├── public/ # 静态资源 ├── src/ # 源码目录 │ ├── assets/ # 静态资源 │ ├── components/ # 组件 │ ├── App.vue # 根组件 │ └── main.js # 入口文件 ├── package.json # 项目配置 └── vue.config.js # 自定义配置 ``` 5. 启动开发服务器: ```bash cd my-project npm run serve ``` 对比说明: | 特性 | CDN 引入 | Vue CLI | |-------------------|----------------------------|-----------------------------| | 适用场景 | 简单页面/快速验证 | 中大型项目/工程化开发 | | 构建工具 | 无 | Webpack/Vite | | 单文件组件(.vue) | 不支持 | 支持 | | 热重载 | 无 | 支持 | | 生产优化 | 需手动处理 | 自动代码压缩/拆分 | 建议选择策略: - 学习基础语法 → CDN 方式 - 开发实际项目 → Vue CLI - 最新项目可考虑 Vite 创建(`npm create vue@latest`)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值