ini
This commit is contained in:
commit
5563ded0a1
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
node_modules
|
||||
dist
|
2
.npmrc
Normal file
2
.npmrc
Normal file
@ -0,0 +1,2 @@
|
||||
//npm.xiongxiao.me/:_authToken=${ME_NPM_TOKEN}
|
||||
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
|
22
package.json
Normal file
22
package.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"name": "@kevisual/oss",
|
||||
"version": "0.0.1",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"build": "tsup",
|
||||
"dev": "tsup --watch",
|
||||
"dev:lib": "tsup --watch"
|
||||
},
|
||||
"files": [
|
||||
"dist"
|
||||
],
|
||||
"keywords": [],
|
||||
"author": "abearxiong <xiongxiao@xiongxiao.me>",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"devDependencies": {
|
||||
"minio": "^8.0.5",
|
||||
"tsup": "^8.4.0"
|
||||
}
|
||||
}
|
9
readme.md
Normal file
9
readme.md
Normal file
@ -0,0 +1,9 @@
|
||||
# oss 管理,对minio的封装
|
||||
|
||||
一般常用的功能模块。
|
||||
|
||||
- 上传文件
|
||||
- 下载文件
|
||||
- 删除文件
|
||||
- 复制文件
|
||||
- 列出文件
|
24
src/core/copy-object.ts
Normal file
24
src/core/copy-object.ts
Normal file
@ -0,0 +1,24 @@
|
||||
import { Client, CopyDestinationOptions, CopySourceOptions } from 'minio';
|
||||
|
||||
type CopyObjectOpts = {
|
||||
bucketName: string;
|
||||
newMetadata: Record<string, string>;
|
||||
prefix: string;
|
||||
client: Client;
|
||||
};
|
||||
/**
|
||||
* 复制对象 REPLACE 替换
|
||||
* @param param0
|
||||
* @returns
|
||||
*/
|
||||
export const copyObject = async ({ bucketName, newMetadata, prefix, client }: CopyObjectOpts) => {
|
||||
const source = new CopySourceOptions({ Bucket: bucketName, Object: prefix });
|
||||
const destination = new CopyDestinationOptions({
|
||||
Bucket: bucketName,
|
||||
Object: prefix,
|
||||
UserMetadata: newMetadata,
|
||||
MetadataDirective: 'REPLACE',
|
||||
});
|
||||
const copyResult = await client.copyObject(source, destination);
|
||||
return copyResult;
|
||||
};
|
49
src/core/type.ts
Normal file
49
src/core/type.ts
Normal file
@ -0,0 +1,49 @@
|
||||
import { ItemBucketMetadata, Client } from 'minio';
|
||||
type UploadedObjectInfo = {
|
||||
etag: string;
|
||||
lastModified: Date;
|
||||
size: number;
|
||||
versionId: string;
|
||||
metadata: ItemBucketMetadata;
|
||||
};
|
||||
|
||||
export interface OssBaseOperation {
|
||||
/**
|
||||
* 获取对象
|
||||
* @param objectName 对象名
|
||||
*/
|
||||
getObject(objectName: string): Promise<any>;
|
||||
/**
|
||||
* 上传对象
|
||||
* @param objectName 对象名
|
||||
* @param data 数据
|
||||
*/
|
||||
putObject(objectName: string, data: Buffer | string, metaData?: ItemBucketMetadata): Promise<UploadedObjectInfo>;
|
||||
/**
|
||||
* 上传文件
|
||||
* @param objectName 对象名
|
||||
* @param filePath 文件路径
|
||||
*/
|
||||
fPutObject(objectName: string, filePath: string, metaData?: ItemBucketMetadata): Promise<UploadedObjectInfo>;
|
||||
/**
|
||||
* 获取对象信息
|
||||
* @param objectName 对象名
|
||||
*/
|
||||
statObject(objectName: string): Promise<any>;
|
||||
/**
|
||||
* 删除对象
|
||||
* @param objectName 对象名
|
||||
*/
|
||||
deleteObject(objectName: string): Promise<any>;
|
||||
/**
|
||||
* 列出对象
|
||||
* @param prefix 前缀
|
||||
*/
|
||||
listObjects(prefix: string, opts?: { recursive?: boolean }): Promise<any>;
|
||||
/**
|
||||
* 复制对象
|
||||
* @param sourceObject 源对象
|
||||
* @param targetObject 目标对象
|
||||
*/
|
||||
copyObject: Client['copyObject'];
|
||||
}
|
59
src/index.ts
Normal file
59
src/index.ts
Normal file
@ -0,0 +1,59 @@
|
||||
import { Client, ItemBucketMetadata } from 'minio';
|
||||
import { OssBaseOperation } from './core/type.ts';
|
||||
type OssBaseOptions = {
|
||||
/**
|
||||
* 已经初始化好的minio client
|
||||
*/
|
||||
client?: Client;
|
||||
/**
|
||||
* 桶名
|
||||
*/
|
||||
bucketName: string;
|
||||
};
|
||||
export class OssBase implements OssBaseOperation {
|
||||
client?: Client;
|
||||
bucketName: string;
|
||||
constructor(opts: OssBaseOptions) {
|
||||
if (!opts.client) {
|
||||
throw new Error('client is required');
|
||||
}
|
||||
this.bucketName = opts.bucketName;
|
||||
this.client = opts.client;
|
||||
}
|
||||
async getObject(objectName: string) {
|
||||
const bucketName = this.bucketName;
|
||||
const obj = await this.client.getObject(bucketName, objectName);
|
||||
return obj;
|
||||
}
|
||||
async putObject(objectName: string, data: Buffer | string, metaData?: ItemBucketMetadata) {
|
||||
const size = data.length;
|
||||
const bucketName = this.bucketName;
|
||||
const obj = await this.client.putObject(bucketName, objectName, data, size, metaData);
|
||||
return obj as any;
|
||||
}
|
||||
async deleteObject(objectName: string) {
|
||||
const bucketName = this.bucketName;
|
||||
const obj = await this.client.removeObject(bucketName, objectName);
|
||||
return obj;
|
||||
}
|
||||
async listObjects(prefix: string) {
|
||||
const bucketName = this.bucketName;
|
||||
const obj = this.client.listObjects(bucketName, prefix);
|
||||
return obj;
|
||||
}
|
||||
async fPutObject(objectName: string, filePath: string, metaData?: ItemBucketMetadata) {
|
||||
const bucketName = this.bucketName;
|
||||
const obj = await this.client.fPutObject(bucketName, objectName, filePath, metaData);
|
||||
return obj as any;
|
||||
}
|
||||
async statObject(objectName: string) {
|
||||
const bucketName = this.bucketName;
|
||||
const obj = await this.client.statObject(bucketName, objectName);
|
||||
return obj;
|
||||
}
|
||||
async copyObject(sourceObject: any, targetObject: any) {
|
||||
const bucketName = this.bucketName;
|
||||
const obj = await this.client.copyObject(bucketName, sourceObject, targetObject);
|
||||
return obj;
|
||||
}
|
||||
}
|
32
tsconfig.json
Normal file
32
tsconfig.json
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "nodenext",
|
||||
"target": "esnext",
|
||||
"noImplicitAny": false,
|
||||
"outDir": "./dist",
|
||||
"sourceMap": false,
|
||||
"allowJs": true,
|
||||
"newLine": "LF",
|
||||
"baseUrl": "./",
|
||||
"typeRoots": [
|
||||
"node_modules/@types",
|
||||
"//node_modules/@kevisual/types"
|
||||
],
|
||||
"declaration": true,
|
||||
"noEmit": false,
|
||||
"allowImportingTsExtensions": true,
|
||||
"emitDeclarationOnly": true,
|
||||
"moduleResolution": "NodeNext",
|
||||
"experimentalDecorators": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"esModuleInterop": true,
|
||||
"paths": {
|
||||
"@/*": [
|
||||
"src/*"
|
||||
]
|
||||
}
|
||||
},
|
||||
"include": [
|
||||
"src/**/*.ts",
|
||||
],
|
||||
}
|
14
tsup.config.ts
Normal file
14
tsup.config.ts
Normal file
@ -0,0 +1,14 @@
|
||||
import { defineConfig } from 'tsup';
|
||||
|
||||
export default defineConfig({
|
||||
entry: ['src/index.ts'],
|
||||
|
||||
splitting: false,
|
||||
sourcemap: false,
|
||||
clean: true,
|
||||
format: 'esm',
|
||||
external: ['minio'],
|
||||
dts: true,
|
||||
outDir: 'dist',
|
||||
tsconfig: 'tsconfig.json',
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user