添加delete, query的api, 修复上传中文名文件乱码的问题

This commit is contained in:
539943419 committed 2024-08-11 22:39:20 +08:00
1 parent 737ee87bae
commit 64259e37f4
10 files changed
+323 -14

No files matched your search

+79
View File
@@ -0,0 +1,79 @@
import generateId from "./generateId.js"
// 一个文件操作事件
class FsOprateEvent {
constructor(event){
this.status = 'progress'
this.uid = generateId()
event.then(()=>{
this.status = 'success'
}).catch((e)=>{
this.failedEvent = e
this.status = 'failed'
})
}
/**
* 事件状态,分为progress, success, failed
*/
failedEvent
status
uid
}
class FsOprateEventCenter {
constructor(){
this.eventMap = {}
}
eventMap
/**
* 推送一个事件,返回这个事件的id,后续可以通过这个id查询这个事件的状态
* @param {Promise} event
* @returns {number} 事件id
*/
push(event){
const ev = new FsOprateEvent(event)
const id = ev.uid
this.eventMap[id] = {
event: ev,
// 每小时自查询一下状态,防止一直没查询导致内存泄漏
timer: setInterval(()=>{
this.query(id)
}, 1000*60*60)
}
return id
}
/**
* 推送一个事件,返回这个事件的id,后续可以通过这个id查询这个事件的状态
* 当查询到这个事件已经完成的时候,将这个事件移除出事件表(eventMap)
* @param {number} id 事件id
* @returns {{status: 'success' | 'failed' | 'progress' | 'unknow'; result?: any}} 事件id
*/
query(id){
let status
if(!this.eventMap[id]){
status = 'unknow'
}
else{
status = this.eventMap[id].event.status
}
const res = {status}
if( ['success', 'failed'].includes(status) ){
if(status === 'failed'){
res.result = this.eventMap[id].event.failedEvent
}
clearInterval(this.eventMap[id].timer)
this.eventMap[id] = undefined
}
return res
}
}
const fsOprateEventCenter = new FsOprateEventCenter()
/**
* 除了上传以外的所有文件操作都统一通过这个进行管理
* @returns {fsOprateEventCenter}
*/
export default function useFsOprateEventCenter(){
return fsOprateEventCenter
}