zy-react-library/todo/hooks/useUploadFile/index.js

68 lines
1.7 KiB
JavaScript

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;