import React, { ChangeEvent, ReactNode } from "react"; import { CancelTokenSource } from "axios"; import { BaseButtonProps } from "../Button/button"; interface UploadProps { /** 类型,默认模式不进行回显和显示进度,img模式进行回显图片,progress显示进度*/ type?: "default" | "img" | "progress"; /** 是否选择文件后按提交按钮才上传 */ confirm?: boolean; /** 验证逻辑 返回false则不通过*/ validate?: (e: ChangeEvent) => boolean; /** 选择文件上传按钮的属性 */ uploadBtnAtr?: BaseButtonProps; /** 选择文件上传按钮的文字 */ uploadBtn?: ReactNode; /**上传多少张按钮消失,只在type为img或者progress有效 */ uploadNumber?: number; /** 提交按钮,只在confirm为true有效 */ submitBtn?: ReactNode; /** 自定义提交,不使用内部发送请求进行上传,可自定义上传头*/ customSubmit?: (file: FileList | null) => void; /** 使用内部上传所提供的url */ url?: string; /** 成功的回调 只在使用内部发送有效,下同*/ successCallback?: (res: any) => void; /** 失败的回调 */ failCallback?: (res: any) => void; /** 获取上传进度 */ onProgress?: (percentage: number, file: File, i: number) => void; /** 是否多个文件同时上传*/ multiple?: boolean; /** 上传给服务器的文件名 */ filename?: (f: File, i: number) => string; /** 如果返回promise,需要提供file,否则同步需要返回boolean,如果为false,则不发送*/ beforeUpload?: (f: File, i: number) => boolean | Promise; /** 默认展示的文件及进度,只有type为progress有效 */ defaultProgressBar?: ProgressBar[]; /** 删除文件列表时的回调,只有type为progress或者img有效 */ onRemoveCallback?: (f: ProgressBar) => void; /** 自定义删除行为,只有type为progress或者img有效*/ customRemove?: (file: ProgressBar, setFlist: React.Dispatch>) => void; /** 携带cookie?*/ withCredentials?: boolean; /** 设置请求头*/ headers?: { [key: string]: any; }; /** input的accept属性*/ accept?: string; /** 自定义展示用户的选择,只在confirm为true有效*/ customShowChoose?: (item: File) => ReactNode; } export interface ProgressBar { filename: string; percent: number; status: "ready" | "success" | "failed" | "upload"; uid: string; size: number; raw: File | null; cancel?: CancelTokenSource; img?: string | ArrayBuffer | null; } export declare const UpdateFilist: (setFile: React.Dispatch>, _file: ProgressBar, uploadPartial: Partial) => void; declare function Upload(props: UploadProps): JSX.Element; declare namespace Upload { var defaultProps: { url: string; confirm: boolean; type: string; uploadBtn: string; uploadNumber: number; }; } export default Upload;