2.0.0 • Published 3 years ago

@fatesigner/file-chooser v2.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

file-chooser

build npm download commitizen semantic

web 文件选择器的函数式封装

说明

  • 为 Web input file 操作提供函数式的调用
  • 使用 typescript 编写,定义了一套接口,以适用不同类型的客户端,如 H5、wechat(微信)
  • 支持对图片文件的压缩,使用 @fatesigner/img-compressor
  • 利用 Webpack 的 dynamic import 以减少首屏加载时间

安装

npm i -S @fatesigner/file-chooser

使用

startup.ts

import { fileChooserConfigure } from '@fatesigner/file-chooser';

// 预先配置 file-chooser 默认选项(全局)
fileChooserConfigure({
  // 指定文件类型限制
  fileTypeLimits: ['jpg', 'png'],
  ...
});

main.ts

import { openFileChooser, createFileChooser, IFileChooserChangeResponse } from '@fatesigner/file-chooser';

// 直接打开
openFileChooser(
  {
    accept: '.jpg,.png'
  },
  (res: IFileChooserChangeResponse) => {
    // show selected files
    console.log(res);
  },
  (err: Error) => {
    console.log(err);
  }
);

// 设置页面上指定的一个元素,点击后打开
const chooser = await createFileChooser(
  document.querySelector('#btnChooseFile'),
  {
    accept: '.jpg,.png'
  },
  (res: IFileChooserChangeResponse) => {
    // show selected files
    console.log(res);
  },
  (err: Error) => {
    console.log(err);
  }
);

// 手动打开
chooser.trigger();

// 移除
chooser.destroy();

在 Vue 中使用

<div title="选择文件"
    v-file-chooser="fileChooser.options"
    @fileChooserChange="onFileChooserChange"
    @fileChooserError="onFileChooserError"
>
  <img :src="src" alt="" title="" />
</div>
import { Vue } from 'vue';
import { getImageSrc } from '@fatesigner/utils/document';
import { fileChooserDirective } from '@fatesigner/file-chooser';

Vue.use(fileChooserDirective);

export default {
  data() {
    return {
      src: '',
      fileChooser: {
        options: {
          accept: '.jpg,.png',
          multiple: false,
          maxSize: 10 * 1024,
          compress: {
            quality: 0.6
          }
        }
      }
    };
  },
  methods: {
    onFileChooserChange(res) {
      // set src from file.
      GetImageSrc(res.files[0]).then((src) => {
        this.src = src;
      });
    },
    onFileChooserError(err) {
      console.log(err);
    }
  }
}

API

openFileChooser

打开文件选择框,无需操作 document.

ParamTypeDescription
optionsIFileChooserOptions选项
onChangedIFileChooserChangeResponse文件选择成功后触发,返回
onFailedFunction文件校验(类型、尺寸、数量不符)、压缩失败后触发,返回 Error

createFileChooser

为界面上指定的元素创建文件选择器实例,可为其绑定 click 事件

ParamTypeDescription
targetElHTMLElementElementRef
optionsIFileChooserOptions选项
onChangedIFileChooserChangeResponse文件选择成功后触发,返回
onFailedFunction文件校验(类型、尺寸、数量不符)、压缩失败后触发,返回 Error
ReturnDescription
IFileChooser文件选择器实例

IFileChooserOptions

ParamdefaultDescription
acceptnull允许的文件类型, HTML attribute: accept
capturenull需要捕获的系统设备, HTML attribute: capture
multiplenull允许用户选择多个文件,默认为 false
maxCountnull允许用户选择的文件的数量,默认为 null,即无限制
minSizenull允许用户选择的文件的最小尺寸,默认为 null,即无限制
maxSizenull允许用户选择的文件的最大尺寸,默认为 null,即无限制
idGUID设置元素id,默认设置为一个GUID
fileTypeLimits 在accept参数的基础上限制用户选择的文件类型,默认为空数组,即无限制
datanull绑定任意值,在选择文件事件回调中返回
clickabletrue允许用户点击触发
compress{ quality: 0.8 }图片压缩选项,具体参数可查看 @fatesigner/img-compressor

IFileChooserChangeResponse

export interface IFileChooserChangeResponse {
  data?: any;
  files: File[];
}

IFileChooser

export interface IFileChooser {
  trigger: () => void;
  destroy: () => void;
}
3.0.0-alpha.1

3 years ago

3.0.0-beta.1

3 years ago

2.0.0

3 years ago

1.2.0

4 years ago

1.1.0

4 years ago