UNPKG

@shencom/oss-upload

Version:
96 lines (86 loc) 2.33 kB
import { existsSync, readFileSync } from 'fs'; import { extname } from 'path'; import glob from 'glob'; import minimatch from 'minimatch'; import type AliOSS from 'ali-oss'; import { md5 } from './utils'; export interface FileData { url: string; md5: string; } /** * 验证oss路径 * * @export * @param {string} uploadPath 上传路径 * @param {string} baseOssPath 基础oss路径 * @returns */ export function isOssPath(uploadPath: string, baseOssPath: string) { if (uploadPath === baseOssPath) return true; const filePath = uploadPath.replace(baseOssPath, ''); return !!extname(filePath); } /** * 文件流处理 * * @param {string} filePath 文件路径 * @return {(null | FileData)} */ export function fileStreamHandle(filePath: string): null | FileData { const isFiles = existsSync(filePath); if (!isFiles) return null; const stream = readFileSync(filePath); return { url: filePath, md5: md5(stream) }; } /** * 过滤匹配上的列表数据 * * @param {string[]} [list=[]] * @param {string[]} [patterns=[]] * @return {string[]} */ export function listIgnoreHandle(list: string[] = [], patterns: string[] = []): string[] { patterns.forEach((pattern: string) => { list = minimatch.match(list, `!${pattern}`, { matchBase: true, }); }); return list; } /** * 获取目录下的所有文件路径,排除文件目录 * * @param {string} dirPath * @return {string[]} */ export function getDirFilesPath(dirPath: string, ops?: glob.IOptions): string[] { const files = glob.sync(`${dirPath}/**`, { ...ops, nodir: true }); return files; } /** * 获取目录下的一级文件路径,包括文件目录 * * @param {string} dirPath * @return {string[]} */ export function getDirRootFilesPath(dirPath: string, ops?: glob.IOptions): string[] { const paths = glob.sync(`${dirPath}/*`, { ...ops, mark: true }); return paths; } /** * 只保留oss的 name(oss存储路径) 字段 * * @param {AliOSS.ObjectMeta[]} objects * @return {string[]} */ export function filterOssName(objects: AliOSS.ObjectMeta[]): string[] { const names = objects .map((v) => { const paths = v.name.split('/'); // 过滤 oss 文件夹 if (!paths[paths.length - 1]) return null; return v.name; }) .filter(Boolean) as string[]; return names; }