web 文件选择器的函数式封装.
import { fileChooserConfigure } from '@fatesigner/file-chooser';
// 预先配置 file-chooser 默认选项(全局)
fileChooserConfigure({
// 指定文件类型限制
fileTypeLimits: ['jpg', 'png'],
...
});
import { openFileChooser, createFileChooser } from '@fatesigner/file-chooser';
import { IFileChooserChangeResponse } from '@fatesigner/file-chooser/interfaces';
// 直接打开
openFileChooser({
accept: '.jpg,.png'
}).then((res) => {
// show selected files
console.log(res);
}).catch((err) => {
console.log(err);
});
// 设置页面上指定的一个元素,点击后打开
let 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();
<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/file-chooser/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);
}
}
}