UNPKG

can-can-word-bug

Version:

can-can-word-bug 是一个 TS 编写的工具库

109 lines (107 loc) 4.52 kB
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;