Files
2026-09-24 16:25:22 +08:00

123 lines
2.8 KiB
Plaintext

export { xFileSListType } from "../interface"
export type fileListType = any;
type xFileSNameTYpe = {
name:string,
type:string,
uri:string,
id:string,
file:any,
size:number,
status:number
}
// type callReadBackFun = (byte:ByteArray)=>void
/**
* 由于安卓隐私的问题。实际得到的所有文件 其实 都不是真实地址。因此你想要得到真实的地址,你就得复制到你的应用沙盒中。
*/
export class xFileSystem {
mimeTypeFilter = [] as string[];
filelist = [] as xFileSNameTYpe[]
inputDom:null|HTMLInputElement = null;
multiple:boolean = true;
maxFileSize:number = 30*1024*1024
constructor(typeFilter:string|null,tempmultiple:boolean|null,maxSize:number|null){
if(typeFilter!=null){
let filter : string[] = [] as string[];
let tms = typeFilter! as string[]
for (let i = 0; i < tms.length; i++) {
filter.push("."+tms[i])
}
if(filter.length==0){
filter.push("*/*")
}
this.mimeTypeFilter = filter
}
if(tempmultiple!=null){
this.multiple = tempmultiple!
}
if(maxSize!=null){
this.maxFileSize = maxSize!
}
}
isInfilelist(file:xFileSNameTYpe):boolean{
return this.filelist.some((el):boolean=>{
return el.name==file.name&&el.type==file.type
})
}
destory(){
}
openDocument(call:(list:xFileSListType[])=>void){
let _this = this;
let filetype = this.mimeTypeFilter[0].split('/')[0]
if(filetype=='*'){
filetype = 'all'
}
wx.chooseMessageFile({
count:100,
type:filetype,
success(result) {
let filelist = result.tempFiles
for(let i=0;i<filelist.length;i++){
let item = filelist[i];
let fileitem = {
name:item.name,
type:item.type.substring(item.type.lastIndexOf("/")+1),
uri:"",
id:Math.floor(Math.random() * 1 * Math.floor(Math.random() * Date.now())).toString().substring(0, 10),
file:item,
size:item.size,
status:item.size>_this.maxFileSize?4:0,
} as xFileSNameTYpe
if(!_this.isInfilelist(fileitem)){
_this.filelist.push(fileitem)
}
}
call(_this.filelist.map((el)=>{
return {
name:el.name,
type:el.type,
id:el.id,
request:null,
realFilePath:el.file.path,
cacheFilePath:el.file.path,
size:el.size,
status:el.status
}
}))
},
fail(er) {
console.error(er)
}
})
}
/**
* 删除一个文件条目
* @param {string} id - 文件id
* @returns {fileListType[]} 最新的文件列表
*/
remove(id:string):xFileSListType[]{
return this.filelist.filter(el=>el.id!=id)
}
/**
* 返回一个空文件列表数组
*/
clear():xFileSListType[]{
this.filelist = [] as xFileSNameTYpe[];
return [] as xFileSListType[]
}
copyFileToPath(item:xFileSListType,path:string):Promise<xFileSListType|null>{
return Promise.resolve(item)
}
}