DefinitelyTyped/types/qiniu-js/index.d.ts
2019-01-21 14:48:41 +08:00

384 lines
14 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Type definitions for qiniu-js 2.5
// Project: https://github.com/qiniu/js-sdk#readme
// Definitions by: taoqf <https://github.com/taoqf>
// qiqizjl <https://github.com/qiqizjl>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.1
export as namespace qiniu;
export interface Next {
total: {
loaded: number; // 已上传大小,单位为字节。
total: number; // 本次上传的总量控制信息,单位为字节,注意这里的 total 跟文件大小并不一致。
percent: number; // 当前上传进度范围0100。
};
}
export interface Error {
code: number; // 请求错误状态码,只有在 err.isRequestError 为 true 的时候才有效。可查阅码值对应说明。
message: string; // 错误信息,包含错误码,当后端返回提示信息时也会有相应的错误信息。
isRequestError: true | undefined; // 用于区分是否 xhr 请求错误;当 xhr 请求出现错误并且后端通过 HTTP 状态码返回了错误信息时,该参数为 true否则为 undefined 。
reqId: string; // xhr请求错误的 X-Reqid。
}
export interface AudioInfo {
bit_rate: string;
channels: number;
codec_name: string;
codec_type: string;
duration: string;
index: number;
nb_frames: string;
r_frame_rate: string;
sample_fmt: string;
sample_rate: string;
start_time: string;
tags: {
creation_time: string;
[key: string]: string;
};
}
export interface AvFormat {
bit_rate: string;
duration: string;
format_long_name: string;
format_name: string;
nb_streams: number;
size: string;
start_time: string;
tags: {
creation_time: string;
[key: string]: string;
};
}
export interface VideoInfo {
bit_rate: string;
codec_name: string;
codec_type: string;
display_aspect_ratio: string;
duration: string;
height: number;
index: number;
nb_frames: string;
pix_fmt: string;
r_frame_rate: string;
sample_aspect_ratio: string;
start_time: string;
tags: {
creation_time: string;
[key: string]: string;
};
width: number;
}
export interface AvAudioInfo {
audio: AudioInfo;
format: AvFormat;
video: VideoInfo;
}
export interface AvImageInfo {
format: string;
width: number;
height: number;
colorModel: string;
}
export interface CompletedResult {
avinfo?: AvAudioInfo;
imageInfo?: AvImageInfo;
key: string;
name: string;
size: number;
persistentid: string;
sec: string;
ext: string;
bucket: string;
}
export interface Observer {
next(res: Next): void;
error(err: Error | string): void;
complete(res: CompletedResult): void;
}
export interface Subscription {
unsubscribe(): void;
}
export interface Observable {
subscribe(options: Observer): Subscription;
/**
* 订阅
*
* @param next 接收上传进度信息
* @param error 上传错误后触发;自动重试本身并不会触发该错误,而当重试次数到达上限后则可以触发。当不是 xhr 请求错误时,会把当前错误产生原因直接抛出,诸如 JSON 解析异常等;当产生 xhr 请求错误时,参数 err 为一个包含 code、message、isRequestError 三个属性的 object
* @param complete 接收上传完成后的后端返回信息具体返回结构取决于后端sdk的配置可参考[上传策略](https://developer.qiniu.com/kodo/manual/1206/put-policy)。
* @returns
*/
subscribe(next: (obj: Next) => void, error?: (err: Error | string) => void, complete?: (obj: CompletedResult) => void): Subscription;
}
export interface Extra {
fname: string; // 文件原文件名
params: any; // 用来放置自定义变量
mimeType: string[] | null; // 用来限制上传文件类型,为 null 时表示不对文件类型限制;限制类型放到数组里: ["image/png", "image/jpeg", "image/gif"]
}
export interface Config {
useCdnDomain: boolean; // 是否使用CDN域名 默认false
region: Region | string; // 区域
uphost: string; // 上传 host类型为 string 如果设定该参数则优先使用该参数作为上传地址
disableStatisticsReport: boolean; // 是否不允许上报日志 默认false
retryCount: number; // 上传自动重试次 默认3
concurrentRequestLimit: number; // 分片上传的并发请求量 默认3
checkByMD5: boolean; // 是否开启 MD5 校验,为布尔值;在断点续传时,开启 MD5 校验会将已上传的分片与当前分片进行 MD5 值比对,若不一致,则重传该分片,避免使用错误的分片。读取分片内容并计算 MD5 需要花费一定的时间,因此会稍微增加断点续传时的耗时,默认为 false不开启。
forceDirect: boolean; // 是否上传全部采用直传方式,为布尔值;为 true 时则上传方式全部为直传 form 方式,禁用断点续传,默认 false。
}
/**
* 上传文件
* @param file Blob 对象,上传的文件
* @param key 文件资源名
* @param token 上传验证信息,前端通过接口请求后端获得
* @param putExtra
* @param config
*/
export function upload(file: Blob, key: string | null | undefined, token: string, putExtra: Partial<Extra>, config: Partial<Config>): Observable;
/**
* 返回创建文件的 url当分片上传时我们需要把分片返回的 ctx 信息拼接后通过该 url 上传给七牛以创建文件。
*
* @param url 上传域名可以通过qiniu.getUploadUrl()获得
* @param size 文件大小
* @param key 文件资源名
* @param putExtra
* @returns
*/
export function createMkFileUrl(url: string, size: number, key: string, putExtra: Partial<Extra>): string;
export enum Region {
z0, // 代表华东区域
z1, // 代表华北区域
z2, // 代表华南区域
na0, // 代表北美区域
as0 // 代表新加坡区域
}
export namespace region {
const z0: Region;
const z1: Region;
const z2: Region;
const na0: Region;
const as0: Region;
}
/**
* 接收参数为 config 对象,返回根据 config 里所配置信息的上传域名
*
* @param config
* @param token
* @returns
*/
export function getUploadUrl(config: Partial<Config>, token: string): Promise<string>;
export interface Headers {
[key: string]: string;
}
/**
* 返回 object包含用来获得分片上传设置的头信息参数为 token 字符串;当分片上传时,请求需要带该函数返回的头信息
*
* @param token
* @returns
*/
export function getHeadersForChunkUpload(token: string): Headers;
/**
* 返回 object包含用来获得文件创建的头信息参数为 token 字符串;当分片上传完需要把 ctx 信息传给七牛用来创建文件时,请求需要带该函数返回的头信息
*
* @param token
* @returns
*/
export function getHeadersForMkFile(token: string): Headers;
/**
* 返回[[k, v],...]格式的数组k 为自定义变量 key 名v 为自定义变量值,用来提取 putExtra.params 包含的自定义变量
*
* @param params
* @returns
*/
export function filterParams(params: any): Array<[string, any]>;
export interface CompressOptions {
quality: number; // 图片压缩质量,在图片格式为 image/jpeg 或 image/webp 的情况下生效,其他格式不会生效,可以从 0 到 1 的区间内选择图片的质量。默认值 0.92
maxWidh: number; // 压缩图片的最大宽度值
maxHeight: number; // 压缩图片的最大高度值 (注意:当 maxWidth 和 maxHeight 都不设置时,则采用原图尺寸大小)
noCompressIfLarger: boolean; // 为 true 时如果发现压缩后图片大小比原来还大,则返回源图片(即输出的 dist 直接返回了输入的 file默认 false即保证图片尺寸符合要求但不保证压缩后的图片体积一定变小
}
/**
* 上传前图片压缩
*
* @param file 要压缩的源图片,为 blob 对象,支持 image/png、image/jpeg、image/bmp、image/webp 这几种图片类型
* @param options
* @returns
*/
export function compressImage(file: Blob, options: Partial<CompressOptions>): Promise<{
dist: Blob; // 压缩后输出的 blob 对象,或原始的 file具体看下面的 options 配置
width: number; // 压缩后的图片宽度
height: number; // 压缩后的图片高度
}>;
export interface WaterMarkOptions1 {
mode: 1; // 图片水印
image: string; // 图片水印的Urlmode = 1 时 **必需**
dissolve: number; // 透明度取值范围1-100非必需下同
gravity: 'NorthWest' | 'North' | 'NorthEast' | 'West' | 'Center' | 'East' | 'SouthWest' | 'South' | 'SouthEast'; // 水印位置
dx: number; // 横轴边距,单位:像素(px)
dy: number; // 纵轴边距,单位:像素(px)
}
export interface WaterMarkOptions2 {
mode: 2; // 文字水印
text: string; // 水印文字mode = 2 时 **必需**
dissolve: number; // 透明度取值范围1-100非必需下同
gravity: 'NorthWest' | 'North' | 'NorthEast' | 'West' | 'Center' | 'East' | 'SouthWest' | 'South' | 'SouthEast'; // 水印位置
fontsize: number; // 字体大小,单位: 缇
font: string; // 水印文字字体
dx: number; // 横轴边距,单位:像素(px)
dy: number; // 纵轴边距,单位:像素(px)
fill: string; // 水印文字颜色RGB格式可以是颜色名称
}
/**
* 水印
*
* @param options 包含的具体水印参数解释见水印([watermark](https://developer.qiniu.com/dora/manual/1316/image-watermarking-processing-watermark)
* @param key 文件资源名
* @param domain 为七牛空间bucket)对应的域名,选择某个空间后,可通过"空间设置->基本设置->域名设置"查看获取,前端可以通过接口请求后端得到
* @returns 返回添加水印后的图片地址,可以赋值给 html 的 img 元素的 src 属性, 若未指定key可以通过以下方式获得完整的 imgLink
* `imgLink = '<domain>/<key>?' + imgLink`
* <domain> 为七牛空间bucket)对应的域名,选择某个空间后,可通过"空间设置->基本设置->域名设置"查看获取
*/
export function watermark(options: WaterMarkOptions1 | WaterMarkOptions2, key?: string, domain?: string): string;
export interface ImageView2Options {
mode: 0 | 1 | 2 | 3 | 4 | 5; // 缩略模式共6种[0-5]
w: number; // 具体含义由缩略模式决定
h: number; // 具体含义由缩略模式决定
q: number; // 新图的图像质量取值范围1-100
format: 'jpg' | 'gif' | 'png' | 'webp' | string; // 新图的输出格式取值范围jpggifpngwebp等
}
/**
* 缩略
*
* @param options 具体缩略参数解释见[图片基本处理imageView2](https://developer.qiniu.com/dora/manual/1279/basic-processing-images-imageview2)
* @param key
* @param domain
* @returns 返回处理后的图片url
*/
export function imageView2(options: Partial<ImageView2Options>, key: string, domain: string): string;
export interface ImageMogr2Options {
'auto-orient': boolean; // 布尔值是否根据原图EXIF信息自动旋正便于后续处理建议放在首位。
strip: boolean; // 布尔值,是否去除图片中的元信息
thumbnail: string; // 缩放操作参数
crop: string; // 裁剪操作参数
gravity: string; // 裁剪锚点参数
quality: number; // 图片质量取值范围1-100
rotate: number; // 旋转角度取值范围1-360缺省为不旋转。
format: string; // 新图的输出格式取值范围jpggifpngwebp等
blur: string; // 高斯模糊参数
}
/**
* 返回处理后的图片url
*
* @param optoins 具体高级图像处理参数解释见[图像高级处理imageMogr2](https://developer.qiniu.com/dora/manual/1270/the-advanced-treatment-of-images-imagemogr2)
* @param key
* @param domain
* @returns 返回处理后的图片url
*/
export function imageMogr2(optoins: Partial<ImageMogr2Options>, key: string, domain: string): string;
export interface ImageInfo {
size: number; // 文件大小单位Bytes
format: 'png' | 'jpeg' | 'gif' | 'bmp'; // 图片类型如png、jpeg、gif、bmp等。
width: number; // 图片宽度,单位:像素(px) 。
height: number; // 图片高度,单位:像素(px) 。
colorModel: string; // 彩色空间如palette16、ycbcr等。
frameNumber: number; // 帧数gif 图片会返回此项。
}
/**
*
* 图片基本信息
* 具体 imageInfo 解释见[图片基本信息imageInfo](https://developer.qiniu.com/dora/manual/1269/pictures-basic-information-imageinfo)
*
* @param key
* @param domain
* @returns
*/
export function imageInfo(key: string, domain: string): Promise<ImageInfo>;
export interface ExtendedInfo {
code: number;
error: string;
[key: string]: {
type: number;
val: string;
} | number | string;
}
export interface ExtentInfoValue {
type: number;
val: string;
}
export interface ExtentInfo {
[key: string]: ExtentInfoValue;
DateTime: ExtentInfoValue;
ExposureBiasValue: ExtentInfoValue;
ExposureTime: ExtentInfoValue;
Model: ExtentInfoValue;
ISOSpeedRatings: ExtentInfoValue;
ResolutionUnit: ExtentInfoValue;
}
/**
* EXIF 信息
* 具体 exif 解释见[图片 EXIF 信息exif](https://developer.qiniu.com/dora/manual/1260/photo-exif-information-exif)
* @param key
* @param domain
* @returns
*/
export function exif(key: string, domain: string): Promise<ExtentInfo>;
export interface WaterMarkFopOptions1 extends WaterMarkOptions1 {
fop: 'watermark';
}
export interface WaterMarkFopOptions2 extends WaterMarkOptions2 {
fop: 'watermark';
}
export interface ImageView2FopOptions extends ImageView2Options {
fop: 'imageView2';
}
export interface ImageMogr2FopOptions extends ImageMogr2Options {
fop: 'imageMogr2';
}
export function pipeline(fos: Array<(WaterMarkFopOptions1 | WaterMarkFopOptions2 | ImageView2FopOptions | ImageMogr2FopOptions)>, key: string, domain: string): string;