import { request } from "@cqsjjb/jjb-common-lib/http"; import { useState } from "react"; /** * 上传文件 TODO */ function useUploadFile() { // loading状态 const [loading, setLoading] = useState(false); // 上传文件 const uploadFile = (options) => { setLoading(true); return new Promise((resolve, reject) => { const { files = [], single = true, params = {} } = options; const formData = new FormData(); // 将文件添加到formData中 files.forEach((f) => { f.originFileObj && formData.append("files", f.originFileObj); }); // 将额外携带的参数添加到formData中 Object.keys(params).forEach((key) => { formData.append(key, params[key]); }); // 获取待上传的文件 const filesLength = formData.getAll("files").length; // 如果没有文件则返回老文件 if (filesLength === 0) { setLoading(false); resolve( single ? files?.[0]?.url || "" : { files: files.map(f => f.url), id: "" }, ); return; } // 发送请求 request(single ? "单文件上传的接口" : "多文件上传的接口", "post", formData, { "Content-Type": "multipart/form-data" }) .then((res) => { resolve( single ? res.data.url : { files: [...res.data.files.map(f => f.url), ...files.filter(f => !f.originFileObj).map(f => f.url)], id: res.data.id, }, ); }) .catch((err) => { reject(err); }) .finally(() => { setLoading(false); }); }); }; return [loading, uploadFile]; } export default useUploadFile;