JS——fetch、axios下载文件

该文章展示了如何使用fetchAPI和axios库来实现文件的下载功能。通过设置请求地址、方法、主体参数和文件名等接口选项,创建Promise处理网络请求,将响应转换为Blob对象,然后利用HTML的a标签模拟点击下载。两种方法都确保了文件可以被正确命名并启动下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Fetch

interface Option {
  /** 请求地址 */
  url: string
  /** 请求方式 */
  method?: string
  /** 主体参数 */
  body?: any
  /** 文件名 */
  fileName?: string
}

/* 导出文件 */
export function downloadFile(option: Option) {
  new Promise((r, j) => {
    fetch(option.url, {
      method: option.method || 'GET',
      body: JSON.stringify(option.body),
      headers: {
        'Content-Type': 'application/json;charset=utf-8',
      }
    })
      .then(res => res.blob())
      .then(blob => {
        const blobUrl = window.URL.createObjectURL(blob)
        const a = document.createElement('a')
        a.download = option.fileName || Date.now().toString()
        a.href = blobUrl
        a.target = "_blank"
        document.body.appendChild(a)
        a.click()
        a.remove()
        window.URL.revokeObjectURL(blobUrl)
        r(blob)
      })
      .catch(e => j(e))
  })
}

2.axios

import axios from "axios"

interface Option {
  /** 请求地址 */
  url: string
  /** 请求方式 */
  method?: string
  /** 主体参数 */
  body?: any
  /** 文件名 */
  fileName?: string
}

/* 导出文件 */
export function downloadFile(option: Option) {
  new Promise((r, j) => {
    axios({
      url: option.url,
      method: option.method || "GET",
      data: option.body,
      responseType: "blob",
    }).then(res => {
      const { data } = res
      let url = window.URL.createObjectURL(data)
      let a = document.createElement('a')
      document.body.appendChild(a)
      a.href = url
      a.download = option.fileName || Date.now().toString()
      a.click()
      window.URL.revokeObjectURL(url)
      r(res)
    }).catch(e => j(e))
  })
}
### Vue3 项目中 `axios.js` 文件的使用配置示例 #### 安装 Axios 为了在 Vue3 项目中使用 Axios,需先通过 npm 安装该依赖。可在项目根目录下运行命令: ```bash npm install --save axios ``` 此操作会更新项目的 `package.json` 文件,在其中加入对 Axios 的依赖[^1]。 #### 创建 Axios 实例 建议创建独立文件用于定义 Axios 实例以便于管理和维护。例如可以在 `src/utils/axios.js` 中编写如下代码: ```javascript // src/utils/axios.js import axios from 'axios'; const instance = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // 设置基础URL timeout: 5000 // 超时时间设置为5秒 }); export default instance; ``` 这段代码初始化了一个带有默认配置的新 Axios 实例,并将其导出以备后续引入使用[^2]。 #### 注册全局变量或组件属性 为了让整个应用都能访问到这个自定义的 Axios 实例,可以利用 Vue3 的 Composition API 或者 Provide/Inject 功能来进行注册。以下是两种方式的具体实现方法之一——Provide/Inject 方式: ```javascript // src/main.js import { createApp } from 'vue'; import App from './App.vue'; import axiosInstance from './utils/axios'; const app = createApp(App); app.provide('axios', axiosInstance); // 将 Axios 实例作为 provide 对象的一部分注入给子级组件 app.mount('#app'); ``` 这样做的好处是在任何地方都可以轻松获得已配置好的 Axios 实例而无需重复导入[^3]。 另外一种更灵活的方式是直接挂载至全局属性上,方便调用: ```javascript // main.js 配置 globalProperties import { createApp } from 'vue'; import App from './App.vue'; import axios from 'axios'; const app = createApp(App); // 添加到globalProperties app.config.globalProperties.$http = axios; app.mount("#app"); ``` 此时可以直接在模板内像 `$http.get()` 这样简单地发起请求[^5]。 #### 发起 HTTP 请求 当完成了上述准备工作之后就可以很方便地发送各种类型的 HTTP 请求了。下面给出几个简单的例子说明如何做 GET 和 POST 请求: ```javascript // 组件内部的方法 methods: { fetchData() { this.$http.get('/some/path') .then(response => console.log(response.data)) .catch(error => console.error(error)); }, postData(data) { this.$http.post('/another/path', data) .then(response => console.log(response.status)) .catch(error => console.error(error)); } } ``` 以上就是关于 Vue3 项目中的 `axios.js` 文件及其相关配置的一个基本介绍和示范[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值