ini
This commit is contained in:
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user