///
import TOSBase, { TosResponse } from '../../base';
import { CreateMultipartUploadInput } from './createMultipartUpload';
import { CompleteMultipartUploadOutput } from './completeMultipartUpload';
import { CancelToken } from 'axios';
import { DataTransferStatus } from '../../../interface';
import { IRateLimiter } from '../../../interface';
export interface UploadFileInput extends CreateMultipartUploadInput {
/**
* if the type of `file` is string,
* `file` represents the file path that will be uploaded
*/
file: string | File | Blob | Buffer;
/**
* default is 20 MB
*
* unit: B
*/
partSize?: number;
/**
* the number of request to parallel upload part,default value is 1
*/
taskNum?: number;
/**
* if checkpoint is a string and point to a exist file,
* the checkpoint record will recover from this file.
*
* if checkpoint is a string and point to a directory,
* the checkpoint will be auto generated,
* and its name is `{bucketName}_{objectName}.{uploadId}`.
*/
checkpoint?: string | CheckpointRecord;
dataTransferStatusChange?: (status: DataTransferStatus) => void;
/**
* the feature of pause and continue uploading
*/
uploadEventChange?: (event: UploadEvent) => void;
/**
* the simple progress feature
* percent is [0, 1]
*/
progress?: (percent: number, checkpoint: CheckpointRecord) => void;
/**
* cancel this upload progress
*/
cancelToken?: CancelToken;
/**
* enable md5 checksum to uploadPart method
*
* default: false
*/
enableContentMD5?: boolean;
/**
* unit: bit/s
* server side traffic limit
**/
trafficLimit?: number;
/**
* only works for nodejs environment
*/
rateLimiter?: IRateLimiter;
}
export interface UploadFileOutput extends CompleteMultipartUploadOutput {
}
export declare enum UploadEventType {
CreateMultipartUploadSucceed = 1,
CreateMultipartUploadFailed = 2,
UploadPartSucceed = 3,
UploadPartFailed = 4,
UploadPartAborted = 5,
CompleteMultipartUploadSucceed = 6,
CompleteMultipartUploadFailed = 7
}
export interface UploadPartInfo {
partNumber: number;
partSize: number;
offset: number;
etag?: string;
}
export interface UploadEvent {
type: UploadEventType;
/**
* has value when event is failed or aborted
*/
err?: Error;
bucket: string;
key: string;
uploadId: string;
checkpointFile?: string;
uploadPartInfo?: UploadPartInfo;
}
export interface CheckpointRecord {
bucket: string;
key: string;
part_size: number;
upload_id: string;
parts_info?: CheckpointRecordPart[];
file_info?: {
last_modified: number;
file_size: number;
};
}
interface CheckpointRecordPart {
part_number: number;
part_size: number;
offset: number;
etag: string;
hash_crc64ecma: string;
is_completed: boolean;
}
export declare function uploadFile(this: TOSBase, input: UploadFileInput): Promise>;
export default uploadFile;