68 lines
1.7 KiB
JavaScript
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;
|