can-can-word-bug
Version:
can-can-word-bug 是一个 TS 编写的工具库
109 lines (107 loc) • 4.52 kB
TypeScript
import { ZipWriterConstructorOptions } from './zip';
/** 文件 */
type TFile = File & {
webkitRelativePath: string;
};
/**
* # 上传文件
* ## 注意:必须通过用户事件触发该函数,比如 click 事件
* ## 示例:
* ```ts
* import { uploadFile } from 'can-can-word-bug'
* document.body.addEventListener('click', async () => {
* const res = await uploadFile({
* 'accept': 'image/*', // 接受所有图片文件
* multiple: false, // 是否多选
* capture: 'camera', // 'camera' | 'camcorder' | 'microphone'
* directory: false, // 是否允许选择文件夹
* mozFullPath: false, // 是否返回完整路径,仅 Firefox 支持
* webkitRelativePath: false, // 是否返回 webkitRelativePath,仅 WebKit 支持
* zipOpts: false, // 是否压缩文件
* maxSize: false, // 最大文件大小,单位:字节
* checkAllFileSize: false // 是否检查所有文件大小,单位:字节
* })
* console.log(res)
* })
* ```
*/
declare const uploadFile: <Opts extends {
/**
* # 指定允许上传的文件类型
* ## 示例:
* ```ts
* uploadFile({
* accept: 'audio/*', // 接受所有音频文件
* // accept: 'video/*', // 接受所有视频文件
* // accept: 'image/*', // 接受所有视频文件
* // accept: 'image/png', // 等同 '.png',只接受 png 图片
* // accept: ''image/png, image/jpeg'', // 等同 '.png, .jpg, .jpeg',只接受 PNG 和 JPEG 文件
* // accept: '.doc,.docx,.xml,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document', // 接受所有文档文件
* })
* ```
* ---
* [MDN 文档地址](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/Input/file#accept)
*/
accept?: string;
/**
* # 允许选择多个文件
* - 当用户所在的平台允许使用 Shift 或者 Control 键时,用户可以选择多个文件
* - 与 webkitdirectory 二选一
* ---
* [MDN 文档地址](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/Input/file#multiple)
*/
multiple?: Opts["directory"] extends true ? never : boolean;
/**
* # 指定通过设备(如相机或麦克风)捕获文件的方式
* ---
* - camera:相机
* - camcorder:摄像机
* - microphone:麦克风
* - 以前是一个布尔类型的属性,如果为 true,则请求使用设备的媒体捕获设备(如:摄像机),而不是请求一个文件输入。
* ---
* [MDN 文档地址](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/Input/file#capture)
*/
capture?: "camera" | "camcorder" | "microphone" | boolean;
/**
* # 是否上传文件夹
* - 与 multiple 二选一
* - Chrome、Safari、Firefox 内核支持
* ---
* [webkitdirectory 文档地址](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/Input/file#webkitdirectory)
*/
directory?: Opts["multiple"] extends true ? never : boolean;
/**
* # 获取用户选择的文件的完整路径
* - Firefox 内核支持
*/
mozFullPath?: boolean;
/**
* # 获取用户选择的文件的相对路径
* - Chrome、Safari 内核支持
* ---
* [MDN 文档地址](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/Input/file#webkitdirectory)
*/
webkitRelativePath?: boolean;
/**
* # 压缩配置选项
* [zip.js 文档地址](https://gildas-lormeau.github.io/zip.js/api/interfaces/ZipWriterConstructorOptions.html)
* @default false
*/
zipOpts?: ZipWriterConstructorOptions | boolean;
/**
* # 限制大小
* - 单位字节
* - 在上传多个文件时,限制规则为每一个文件的大小,
* 如果要限制所有文件总和的大小,将 checkAllFileSize 设置为 true
*/
maxSize?: number;
/**
* - # 使 maxSize 限制所有文件字节总大小
* @default false
*/
checkAllFileSize?: boolean;
}, Res extends Opts["zipOpts"] extends ZipWriterConstructorOptions | true ? {
fileList: TFile[];
zipFile: Blob;
} : Opts["multiple"] extends true ? TFile[] : Opts["directory"] extends true ? TFile[] : TFile>(opts?: Opts) => Promise<Res>;
export default uploadFile;