| | |
| | | import type { AxiosRequestConfig, AxiosInstance, AxiosResponse, AxiosError } from 'axios'; |
| | | import type { RequestOptions, Result, UploadFileParams } from '../../../../types/axios'; |
| | | import type { RequestOptions, Result, UploadFileParams } from '/#/axios'; |
| | | import type { CreateAxiosOptions } from './axiosTransform'; |
| | | import axios from 'axios'; |
| | | import qs from 'qs'; |
| | | import { AxiosCanceler } from './axiosCancel'; |
| | | import { isFunction } from '/@/utils/is'; |
| | | import { cloneDeep, omit } from 'lodash-es'; |
| | | import { cloneDeep } from 'lodash-es'; |
| | | import { ContentTypeEnum } from '/@/enums/httpEnum'; |
| | | import { RequestEnum } from '/@/enums/httpEnum'; |
| | | |
| | |
| | | // Request interceptor configuration processing |
| | | this.axiosInstance.interceptors.request.use((config: AxiosRequestConfig) => { |
| | | // If cancel repeat request is turned on, then cancel repeat request is prohibited |
| | | const { |
| | | headers: { ignoreCancelToken }, |
| | | } = config; |
| | | |
| | | // @ts-ignore |
| | | const { ignoreCancelToken } = config.requestOptions; |
| | | const ignoreCancel = |
| | | ignoreCancelToken !== undefined |
| | | ? ignoreCancelToken |
| | |
| | | // Response result interceptor error capture |
| | | responseInterceptorsCatch && |
| | | isFunction(responseInterceptorsCatch) && |
| | | this.axiosInstance.interceptors.response.use(undefined, responseInterceptorsCatch); |
| | | this.axiosInstance.interceptors.response.use(undefined, (error) => { |
| | | // @ts-ignore |
| | | responseInterceptorsCatch(this.axiosInstance, error); |
| | | }); |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | uploadFile<T = any>(config: AxiosRequestConfig, params: UploadFileParams) { |
| | | const formData = new window.FormData(); |
| | | const customFilename = params.name || 'file'; |
| | | |
| | | if (params.filename) { |
| | | formData.append(customFilename, params.file, params.filename); |
| | | } else { |
| | | formData.append(customFilename, params.file); |
| | | } |
| | | |
| | | if (params.data) { |
| | | Object.keys(params.data).forEach((key) => { |
| | | if (!params.data) return; |
| | | const value = params.data[key]; |
| | | const value = params.data![key]; |
| | | if (Array.isArray(value)) { |
| | | value.forEach((item) => { |
| | | formData.append(`${key}[]`, item); |
| | |
| | | return; |
| | | } |
| | | |
| | | formData.append(key, params.data[key]); |
| | | formData.append(key, params.data![key]); |
| | | }); |
| | | } |
| | | formData.append(params.name || 'file', params.file, params.filename); |
| | | const customParams = omit(params, 'file', 'filename', 'file'); |
| | | |
| | | Object.keys(customParams).forEach((key) => { |
| | | formData.append(key, customParams[key]); |
| | | }); |
| | | |
| | | return this.axiosInstance.request<T>({ |
| | | ...config, |
| | |
| | | data: formData, |
| | | headers: { |
| | | 'Content-type': ContentTypeEnum.FORM_DATA, |
| | | // @ts-ignore |
| | | ignoreCancelToken: true, |
| | | }, |
| | | }); |