/// <reference types="node" />
import { BaseObject } from '../../context/base.object';
import { RequestContext } from '../../context/request.context';
import { IOssConfig } from '../../database/db.oss.config';
/**
 * oss 选项信息
 */
export interface OSSOptions {
    /**
     * 凭证id
     */
    accessKeyId: string;
    /**
     * 凭证secret
     */
    accessKeySecret: string;
    /**
     * bucket所在region
     */
    region: string;
    /**
     * 临时凭证
     */
    stsToken?: string;
    /**
     * bucket
     */
    bucket: string;
    endpoint?: string;
}
export declare class OssObjectDTO {
    etag: string;
    name: string;
    size: number;
    type: string;
    url: string;
}
/** 阿里云 OSS 服务类 */
export declare class OssAccess extends BaseObject<RequestContext> implements IOssAccess {
    private _alioss;
    private _oss;
    readonly config: OSSOptions;
    private get oss();
    private get alioss();
    /**
     * 阿里云 OSS 管理服务类
     * @param context 上下文对象
     * @param accessKeyId 凭证id
     * @param accessKeySecret 凭证secret
     * @param region bucket所在region
     * @param bucket bucket
     */
    constructor(context: RequestContext, config: IOssConfig);
    /**
     * 把文件从一个bucket搬移到另外一个bucket 文件名称保持不变
     * @param fileName 文件名称
     * @param fromBucket 源bucket
     */
    move(fileName: string, fromBucket: string): Promise<boolean>;
    /**
     * 从bucket里面删除一个文件
     * @param fileName 文件名称
     */
    remove(fileName: string): Promise<boolean>;
    /**
     * 上传文件
     * @param fileName 上传到bucket的文件名称
     * @param localFile 本地文件的路径
     */
    upload(fileName: string, localFile: string): Promise<boolean>;
    /**
     * 流式上传
     * @param fileName 上传到bucket的文件名称
     * @param stream NodeJS.ReadableStream 流
     */
    uploadStream(fileName: string, stream: NodeJS.ReadableStream): Promise<boolean>;
    /**
     * 流式上传指定 url
     * @param fileName 上传到bucket的文件名称
     * @param url 来源数据URL
     * @returns 返回上传的数据大小
     */
    uploadUrlDownload(fileName: string, url: string | undefined): Promise<number>;
    /**
     * 上传内存数据
     * @param fileName 上传到bucket的文件名称
     * @param buffer Buffer 数据， new Buffer("xxx")
     */
    uploadBuffer(fileName: string, buffer: Buffer): Promise<boolean>;
    /** 获取下载地址 */
    getDownloadUrl(fileName: string): string;
    /**
     * 获取指定路径下所有文件名
     * @param path 文件路径，如果指定，需要 "/" 结尾
     * @returns
     */
    getFileList(path: string): Promise<OssObjectDTO[]>;
    /**
       * 获取oss上传临时凭证
       * @param roleArn oss角色，在阿里云账号中心可以找到
       * @param expire 凭证有效期 单位秒 调用方应该把这个凭证缓存起来，不用每次都获取新的token 最小 900秒，最大3600秒
       * @param session 应用名称
       */
    getStsToken(roleArn: string, expire?: number, session?: string): Promise<OSSOptions>;
}
/** 阿里云 OSS 数据通道 */
export interface IOssAccess {
    readonly config: IOssConfig;
    /**
     * 把文件从一个bucket搬移到另外一个bucket 文件名称保持不变
     * @param fileName 文件名称
     * @param fromBucket 源bucket
     */
    move: (fileName: string, fromBucket: string) => Promise<boolean>;
    /**
     * 从bucket里面删除一个文件
     * @param fileName 文件名称
     */
    remove: (fileName: string) => Promise<boolean>;
    /**
     * 上传文件
     * @param fileName 上传到bucket的文件名称
     * @param localFile 本地文件的路径
     */
    upload: (fileName: string, localFile: string) => Promise<boolean>;
    /**
      * 流式上传
      * @param fileName 上传到bucket的文件名称
      * @param stream NodeJS.ReadableStream 流
      */
    uploadStream: (fileName: string, stream: NodeJS.ReadableStream) => Promise<boolean>;
    /**
     * 流式上传指定 url
     * @param fileName 上传到bucket的文件名称
     * @param url 来源数据URL
     * @returns 返回上传的数据大小
     */
    uploadUrlDownload: (fileName: string, url: string | undefined) => Promise<number>;
    /**
     * 上传内存数据
     * @param fileName 上传到bucket的文件名称
     * @param buffer Buffer 数据， new Buffer("xxx")
     */
    uploadBuffer: (fileName: string, buffer: Buffer) => Promise<boolean>;
    /** 获取下载地址 */
    getDownloadUrl: (fileName: string) => string;
    /**
     * 获取指定路径下所有文件名
     * @param path 文件路径，如果指定，需要 "/" 结尾
     * @returns
     */
    getFileList: (path: string) => Promise<OssObjectDTO[]>;
    /**
     * 获取oss上传临时凭证
     * @param roleArn oss角色，在阿里云账号中心可以找到
     * @param expire 凭证有效期 单位秒 调用方应该把这个凭证缓存起来，不用每次都获取新的token 最小 900秒，最大3600秒
     * @param session 应用名称
     */
    getStsToken: (roleArn: string, expire?: number, session?: string) => Promise<OSSOptions>;
}
