npm i @faceunity/storage
import { Storage, StorageType } from 'storage';
const instance = new Storage(StorageType.OSS, {
region: process.env.OSS_REGION,
secure: true,
accessKeyId: process.env.OSS_KEY,
accessKeySecret: process.env.OSS_SECRET,
bucket: process.env.OSS_BUCKET,
internal: false,
});
(async () => {
const url = await instance.generatePublicObjectUrl("test.json");
console.log(url);
console.log(await instance.exist("test.json"));
})()
minio后端的截图功能使用ffmpeg实现,优先使用本地的ffmpeg,其次使用@ffmpeg-installer/ffmpeg包,都不满足时无法使用截图相关接口与配置
import { Storage, StorageType } from 'storage';
const instance = new Storage(StorageType.OSS, {
endPoint: process.env.MINIO_ENDPOINT,
port: 9000,
accessKey: process.env.MINIO_KEY,
secretKey: process.env.MINIO_SECRET,
useSSL: false,
bucket: process.env.MINIO_BUCKET, //为了兼容OSS行为,除minio实例化必须参数外还需要传入bucket参数指定仓库
});
(async () => {
const url = await instance.generatePublicObjectUrl("test.json");
console.log(url);
console.log(await instance.exist("test.json"));
})()
/**
* 某些特定需求可以通过实例的instance属性获得具体实现的SDK实例
*/
const instance = new Storage(StorageType.OSS,oss_options);
instance.instance
/**
* 某些实现方式上无法兼容的方法可以通过实例的client属性调用,等同于封装的自定义实现
*/
const instance = new Storage(StorageType.OSS,oss_options);
instance.client
/**
* 存储层后端实现支持StorageType.MINIO或StorageType.OSS
* options传入各自后端需要的参数即可
* oss参考https://github.com/ali-sdk/ali-oss#ossoptions
* minio参考https://docs.min.io/docs/javascript-client-api-reference
* minio实现除必要参数外需要额外传入bucket参数,参照上方minio实例
*/
const instance = new Storage(StorageType.OSS,oss_options);
/**
* 该函数支持按页迭代与正则匹配
* 该函数OSS实现从性能考虑不进行全量迭代返回总条数
* 该函数minio实现由于表现一致性问题需要进行全量内存排序,数量级较大时慎用
* OSS实现需要获取总条数或大量minio对象list时使用自定义接口
* @param prefix 前缀匹配
* @param query 正则过滤
* @param page 页数
* @param pageNumber 每页数量
* @returns string[]
*/
instance.list("prefix", new RegExp("t_"), 2, 5);
/**
* 判断对象是否存在
* @param path 对象路径
*/
instance.exist("test.json");
/**
* 删除对象
* @param path 对象路径
*/
instance.delete("test.json");
/**
* 上传对象
* @param path 对象路径
* @param input 读文件流/Buffer
*/
instance.put("test.json",createReadStream("./out.json"));
instance.put("test.json",readFileSync("./out.json"));
/**
* 获取对象Buffer
* @param path 对象路径
*/
instance.get("test.json");
/**
* 一次删除多个对象
* @param paths 对象路径
*/
instance.deleteMulti(["test.json","test1.json"]);
instance.copy("test.json","test1.json");
该接口用于获得对象信息(包括metadata信息),由于ts的编译器目前尚无法支持泛型类实例方法上的泛型推断,默认返回泛型为OSS返回类型,MINIO作为存储后端时可以使用instance.getInfo<StorageType.MINIO>("test.json");
来更正返回类型
instance.getInfo("test.json");
instance.getInfo<StorageType.OSS>("test.json");
instance.getInfo<StorageType.MINIO>("test.json");
/**
* 获取对象公网URL
* @param path 对象路径
*/
instance.client.generatePublicObjectUrl("test.json");
/**
* 获取对象内网URL
* @param path 对象路径
*/
instance.client.generatePrivateObjectUrl("test.json");
generatePublicSnapShotUrl
/**
* 获取对象内网截图URL
* @param path 对象路径
*/
instance.client.generatePublicSnapShotUrl("test.mp4", SnapShotObjectType.VIDEO);
instance.client.generatePublicSnapShotUrl("test.jpg", SnapShotObjectType.IMAGE);
instance.client.generatePublicSnapShotUrl("test.mp4", SnapShotObjectType.VIDEO, { expire: 3600, width: 300, height: -1 });
instance.client.generatePublicSnapShotUrl("test.jpg", SnapShotObjectType.IMAGE, { expire: 3600, width: 300, height: -1 });
generatePrivateSnapShotUrl
/**
* 获取对象内网截图URL
* @param path 对象路径
*/
instance.client.generatePrivateSnapShotUrl("test.mp4", SnapShotObjectType.VIDEO);
instance.client.generatePrivateSnapShotUrl("test.jpg", SnapShotObjectType.IMAGE);
instance.client.generatePrivateSnapShotUrl("test.mp4", SnapShotObjectType.VIDEO, { expire: 3600, width: 300, height: -1 });
instance.client.generatePrivateSnapShotUrl("test.jpg", SnapShotObjectType.IMAGE, { expire: 3600, width: 300, height: -1 });
/**
* 获取对象URL
* @param path 对象路径
*/
instance.client.generateObjectUrl("test.json");
该方法使用FFMPEG生成首帧图(视频/图片),并且支持缩放
/**
* 获取视频首帧图/对图片进行resize
* @param path 对象路径
*/
let buf = instance.client.generateSnapShotImage("test.mp4", SnapShotObjectType.VIDEO, { width: -1, height: 300 });
buf = instance.client.generateSnapShotImage("test.png", SnapShotObjectType.IMAGE, { width: -1, height: 300 });
buf = instance.client.generateSnapShotImage("test.mp4", SnapShotObjectType.VIDEO, { width: -1, height: 300 });
buf = instance.client.generateSnapShotImage("test.png", SnapShotObjectType.IMAGE, { width: -1, height: 300 });
buf = instance.client.generateSnapShotImage("test.mp4", SnapShotObjectType.VIDEO, { width: -1, height: 300 });
buf = instance.client.generateSnapShotImage("test.png", SnapShotObjectType.IMAGE, { width: -1, height: 300 });