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