axios上传文件方法封装

1. 运行环境

  • react项目
  • axios版本:0.26.1(版本应该影响不大)

2. 方法封装

src 目录api文件夹下request.js文件

export function request(apiUrl,reqParams){
  let {
    method = 'get',
    params = {},
    data= {},
  } = reqParams
  // console.log(method)
  // console.log(params)

  return new Promise(function(resolve,reject){
    axios({
      url: apiUrl,
      method:method,
      params:params,
      data: data,
    }).then(function(res){
      if(res){
        if(res.data && res.data.code){
          resolve(res)
        }else{
          notification.error({
            message: '操作失败',
          })
          resolve(res)
        }
      }else{
        notification.error({
          message: '操作失败'
        })
        resolve(res)
      }
    }).catch(function(error){
      notification.error({
        message: '操作失败',
        description: '网络异常'
      })
      reject(error)
    })
  })
}

在src目录下的api文件夹的upload.js文件(可自定义文件存放位置和文件名,不过要和 此文章)的请求方法引入保持统一:

import {request} from'./request.js'
export function upload(params){
// apiUrl即为你请求接口的地址
	return request(apiUrl,params)
}
二次封装 axios 通常是为了简化 API 调用过程、统一数据结构、增加错误处理机制以及增强安全性等。在封装过程中,我们可能会遇到需要通过 HTTP POST 请求上传文件的情况。以下是使用 Axios 进行文件上传的基本步骤: ### 步骤 1: 创建 axios 配置实例 首先,创建一个 axios 的实例,并配置好超时时间、请求头等。 ```javascript import axios from 'axios'; const axiosInstance = axios.create({ baseURL: 'http://your-api-url.com', // 指定API服务器地址 timeout: 5000, // 设置请求超时时间 }); ``` ### 步骤 2: 添加上传文件功能 在封装axios 函数中,你可以将文件作为请求的数据的一部分来发送。这通常是通过 `data` 属性来完成的,并设置其 `Content-Type` 为 `multipart/form-data` 来告知服务器这是一个文件上传操作。 ```javascript function uploadFile(file, params) { const formData = new FormData(); formData.append('file', file); for (let key in params) { formData.append(key, params[key]); } return axiosInstance.post('/upload', formData, { headers: { 'Content-Type': 'multipart/form-data', }, }); } ``` ### 步骤 3: 使用封装后的函数 现在你可以像使用普通的 axios 请求一样调用这个新的函数,只需要传入你要上传的文件和对应的参数即可。 ```javascript const uploadedFile = document.getElementById('my-file-input').files; const requestParams = { /* your parameters */ }; uploadFile(uploadedFile, requestParams) .then(response => { console.log('Success:', response.data); }) .catch(error => { console.error('Error:', error.response ? error.response.data : error.message); }); ``` ### 相关问题: 1. **为什么需要二次封装 axios?** - 提高代码复用性,减少不必要的重复代码。 - 统一了 API 调用的方式和风格,便于团队成员理解和维护。 - 易于添加额外的功能如日志记录、中间件、异常处理等。 2. **二次封装 axios 时需要注意哪些事项?** - **安全**: 确保敏感信息不会泄露,例如在日志中不包含用户凭据。 - **性能优化**: 对请求进行适当缓存或异步加载以提升用户体验。 - **兼容性**: 确保封装的函数在各种浏览器和环境中都能正常工作。 3. **如何调试二次封装axios 函数?** - 使用 `console.log()` 或专门的调试工具查看请求和响应的具体内容。 - 开发环境可以开启 CORS(Cross-Origin Resource Sharing),以便于前端和后端调试通信问题。 - 使用断言(assertions)检查返回值是否符合预期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值