2025-06-15 16:36:08 +08:00

217 lines
5.2 KiB
JavaScript

const iconConfig = [
{
type: ['', undefined, null],
mime: '',
icon: '/devTools/page/static/fileSys/weizhiwenjian.png',
},
{
type: ['dwg'],
mime: 'dwg',
icon: '/devTools/page/static/fileSys/DWG.png',
},
{
type: ['xls', 'xlsx', 'csv'],
mime: 'xls',
icon: '/devTools/page/static/fileSys/excel.png',
},
{
type: ['exe'],
mime: 'exe',
icon: '/devTools/page/static/fileSys/EXE.png',
},
{
type: ['gif'],
mime: 'gif',
icon: '/devTools/page/static/fileSys/GIF.png',
},
{
type: ['html'],
mime: 'html',
icon: '/devTools/page/static/fileSys/HTML.png',
},
{
type: ['pdf'],
mime: 'pdf',
icon: '/devTools/page/static/fileSys/pdf.png',
},
{
type: ['ppt'],
mime: 'ppt',
icon: '/devTools/page/static/fileSys/pptl.png',
},
{
type: ['psd'],
mime: 'psd',
icon: '/devTools/page/static/fileSys/PSD.png',
},
{
type: ['rvt'],
mime: 'rvt',
icon: '/devTools/page/static/fileSys/RVT.png',
},
{
type: ['mp4', 'avi', 'wmv', 'mpg', 'mpeg', 'mov', 'flv', '3gp', 'mp3gp', 'mkv', 'rmvb'],
mime: 'mp4',
icon: '/devTools/page/static/fileSys/shipin.png',
},
{
type: ['skp'],
mime: 'skp',
icon: '/devTools/page/static/fileSys/SKP.png',
},
{
type: ['svg'],
mime: 'svg',
icon: '/devTools/page/static/fileSys/SVG.png',
},
{
type: ['png', 'jpeg', 'jpg', 'webp', 'bmp'],
mime: 'img',
icon: '/devTools/page/static/fileSys/tupian.png',
},
{
type: ['txt', 'sql', 'js', 'css', 'log', 'json'],
mime: 'txt',
icon: '/devTools/page/static/fileSys/txt.png',
},
{
type: ['word'],
mime: 'word',
icon: '/devTools/page/static/fileSys/word.png',
},
{
type: ['zip', 'rar', 'gz', '7z'],
mime: 'zip',
icon: '/devTools/page/static/fileSys/yasuo.png',
},
{
type: ['mp3', 'wma', 'wav', 'aac', 'flac'],
mime: '',
icon: '/devTools/page/static/fileSys/yinpin.png',
},
]
export default {
/**
* 获取文件和目录列表
*/
getDirFileList(path) {
return new Promise((yes) => {
// #ifdef APP-PLUS
plus.io.resolveLocalFileSystemURL(
path,
function (entry) {
if (entry.isDirectory) {
let reader = entry.createReader()
reader.readEntries(
async (entries) => {
let dirList = []
let fileList = []
for (let i = 0; i < entries.length; i++) {
/**
* @type {PlusIoDirectoryEntry}
*/
const item = entries[i]
let meta = await getMetaData(item)
let row = {
type: item.isDirectory ? 'dir' : 'file',
name: item.name,
fileType: getFileType(item.name),
...meta,
}
if (item.isDirectory) {
dirList.push(row)
} else {
fileList.push(row)
}
}
dirList = dirList.sort((a, b) => a.time > b.time)
fileList = fileList.sort((a, b) => a.time > b.time)
yes([...dirList, ...fileList])
},
(e) => {
console.log('readEntries error', e)
uni.showToast({
title: '文件读取失败: ' + e.message,
icon: 'none',
})
yes([])
},
)
} else {
uni.showToast({
title: '路径读取失败_b',
icon: 'none',
})
yes([])
}
},
() => {
uni.showToast({
title: '路径读取失败_a',
icon: 'none',
})
yes([])
},
)
// #endif
})
},
/**
* 获取文件图片
*/
getFileIcon(type) {
for (let i = 0; i < iconConfig.length; i++) {
const item = iconConfig[i]
for (let _i = 0; _i < item.type.length; _i++) {
const typeName = item.type[_i]
if (type == typeName) {
return item.icon
}
}
}
return '/devTools/page/static/fileSys/weizhiwenjian.png'
},
}
/**
* @param {PlusIoDirectoryEntry} entry
*/
function getMetaData(entry) {
return new Promise((yes) => {
entry.getMetadata(
function (metadata) {
yes({
size: metadata.size,
time: metadata.modificationTime.getTime(),
fileCount: metadata.fileCount,
directoryCount: metadata.directoryCount,
})
},
function () {
yes({
size: 0,
time: 0,
fileCount: 0,
directoryCount: 0,
})
},
)
})
}
function getFileType(name) {
if (typeof name == 'string') {
let tList = name.split('.')
if (tList.length > 1) {
return tList.pop().toLocaleLowerCase()
} else {
return ''
}
} else {
return ''
}
}