axios js 下载文件 Axios 下载文件Axios下载文件axios下载文件axios下载文件 vue下载文件VUE下载文件

axios js 下载文件 Axios 下载文件Axios下载文件axios下载文件axios下载文件 vue下载文件VUE下载文件

下载文件接口 用 window.open() 也可以实现,但是无法鉴权,携带token等信息

这种方式只适用于简单下载,开发者是知道文件类型的,例如xlsx、.mp3

简单下载

     axios.get("/url", { responseType: "blob" })
            .then((res) => {
              console.info('请求 blob结果', res.data)
              // 创建一个临时的url,参数为blob对象
              let url = window.URL.createObjectURL(res.data); 
              let a = document.createElement("a");
              a.href = url;
              a.download = "你所起的文件名.mp3";
              a.click();
              // 释放这个临时的对象url
              window.URL.revokeObjectURL(url);
       }).catch((err) => {});

请求带参数 下载

     axios({
            'url': '/url',
            'params': {'a': 1, 'b': 2},
            'method': 'GET',
            'responseType':'blob' })
            .then((res) => {
               console.info('请求 blob结果', res.data)
              // 创建一个临时的url,参数为blob对象
              let url = window.URL.createObjectURL(res.data); 
              let a = document.createElement("a");
              a.href = url;
              a.download = "你所起的文件名.mp3";
              a.click();
              // 释放这个临时的对象url
              window.URL.revokeObjectURL(url);
      }) .catch((err) => {});

自动识别blob文件类型

      let fileName = '起风了'  // 文件名设置: 起风了
      // eslint-disable-next-line no-unused-vars
      axios({
        'url': '/url',
        'method': 'get',
        'responseType': 'blob',
      }).then((res) => {
        console.info('请求 blob结果', res.data)
        
        let blobType = 'application/force-download' // 设置blob请求头
        
        let blob = new Blob([res.data], {type: res.data.type}) // 创建blob 设置blob文件类型 data 设置为后端返回的文件(例如mp3,jpeg) type:这里设置后端返回的类型 为 mp3
        
        let downa = document.createElement('a') // 创建A标签
        
        let href = window.URL.createObjectURL(blob) // 创建下载的链接
        
        downa.href = href // 下载地址
        downa.download = fileName // 下载文件名
        document.body.appendChild(downa)
        downa.click() // 模拟点击A标签
        document.body.removeChild(downa) // 下载完成移除元素
        window.URL.revokeObjectURL(href) // 释放blob对象
        
      }).catch(function (error) {
        console.log(error)
      })

简单Demo

    /**
     * 下载文件
     * @param url 文件接口地址
     * @param fileName 文件名称
     * @return 返回一个Promise对象
     */
    async downFile(url, fileName) {
    	return new Promise((resolve, rejected) => {
	        axios.get(url, { responseType: "blob" }).then((res) => {
	            console.info('请求 blob结果', res.data)
	            let url = window.URL.createObjectURL(res.data); // 创建一个临时的url,参数为blob对象
	            let a = document.createElement("a");
	            a.href = url;
	            a.download = fileName;
	            a.click();
	            // 释放这个临时的对象url
	            window.URL.revokeObjectURL(url);
	            resolve()
	        }).catch((err) => {
	        	console.error('下载文件异常,原因:', err)
	        	rejected()
	        });
		})
    },
    async TestDown(){
       await downFile('http://test.api/getFile', '测试文件.txt')
   },

同时处理 JSON和BLOB

大多数情况都是会把下载请求的方法封装起来全局使用,有些时候难免会出现有异常下载请求,这时候需要把异常消息给显示出来,但是固定使用 responseType: "blob" 只能处理blob,无法处理json等请求返回数据,这时候就需要使用 arraybuffer

示例

axios({
      url: `www.hhhh.com`,
      method: 'GET',
      responseType: 'arraybuffer'
    }).then((res) => {
      // 响应类型
      const contentType = res.headers['content-type']
      
      // 处理 JSON 数据
      if (contentType.includes('application/json')) {

            const jsonData = JSON.parse(Buffer.from(res.data).toString('utf-8'))
            console.log('处理 JSON Data:', jsonData)
          
      } else {
         
            // 处理 Blob 数据
            constblobData = new Blob([res.data], { type: res.headers['content-type'] })
            const toUrl = window.URL.createObjectURL(blobData) // 创建一个临时的url指向blob对象
            const a = document.createElement('a')
            a.href = url
            a.download = fileName
            a.click()
            // 释放这个临时的对象url
            window.URL.revokeObjectURL(url)
          
      }
    }).catch((error) => {
    })
Vue中使用axios下载文件的方法可以通过以下步骤来实现: 1. 首先,需要在Vue项目中导入axios和common模块。可以通过以下代码实现导入: ```javascript import axios from 'axios'; import common from '@/api/common'; ``` 2. 接下来,可以定义一个下载文件的方法,比如`download`。该方法可以接收一个参数`record`,表示要下载文件的相关信息。在该方法中,可以调用`common.exportFile`方法来下载文件。此方法接收一个对象作为参数,其中包括文件夹名(`fileCategory`)和文件路径(`filePath`)。具体代码如下: ```javascript const download = (record) => { common.exportFile({'fileCategory':'identify','filePath':record.filePath}); } ``` 3. 在后台的Spring Boot接口中,可以定义一个用于下载附件的接口。可以通过`@RequestMapping`注解定义该接口的URL和请求方法类型。在该接口的方法中,可以使用`@PathVariable`注解来获取参数。具体代码如下: ```java @Transactional @ApiOperation(notes = "下载附件接口", value = "下载附件接口", httpMethod = "GET", produces = "application/json") @RequestMapping(value = "/downloadAttachFile/{leaderPhone}", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") public Result downloadAttachFile(HttpServletResponse response, @ApiParam(name = "leaderPhone", required = true, value = "leaderPhone")@PathVariable("leaderPhone") String leaderPhone ) throws UnsupportedEncodingException { return userService.downloadAttachFile(response,leaderPhone); } ``` 4. 在Excel pom依赖中,需要添加poi和poi-ooxml的依赖。具体的依赖代码如下: ```xml <!-- excel依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.16</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.16</version> </dependency> ``` 通过以上步骤,你可以在Vue中使用axios下载文件。首先导入axios和common模块,然后定义一个下载文件的方法,最后在后台接口中实现文件下载功能,并添加相关的Excel依赖。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue使用axios下载文件](https://blog.csdn.net/qq_43892230/article/details/129811949)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [vue + axios实现文件下载](https://blog.csdn.net/gaopinqiang/article/details/107350563)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值