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; |