import { unref } from "vue"; import {uploadRequest} from "../../axios/index.js"; /** * @description 用于处理单个或多个文件上传,传入数组是批量上传,传入对象是单个上传 * @param {File|File[]} params - 要上传的文件或文件数组,可以是响应式对象 * @param {string|number} type - 文件类型标识 * @param {Object} [api] - 可选的自定义 API 对象 * @param {Function} [api.batch="/img-files/batch"] - 批量上传文件的 API 函数,接受 formData 参数 * @param {Function} [api.single="/img-files"] - 单个文件上传的 API 函数,接受 formData 参数 * @returns {Promise} 上传成功后返回包含文件信息的对象或数组,传入数组会返回数组,传入对象会返回对象 * */ export default async function useUploadFile( params, type, api = { batch: (formData) => uploadRequest('/img-files/batch', formData), single: (formData) => uploadRequest('/img-files', formData), } ) { const file = unref(params); const isArray = Array.isArray(file); const formData = new FormData(); if (isArray) { file.forEach((f) => { f.raw && formData.append("files", f.raw); }); } else { file.raw && formData.append("files", file.raw); } formData.append("type", type); const filesLength = formData.getAll("files").length; if (filesLength === 0) return file; if (isArray) { const { data } = await api.batch(formData); return [...data, ...file.filter((f) => !f.raw)]; } else { const { data } = await api.single(formData); return data; } }