chore: file-upload

This commit is contained in:
dap 2024-10-15 20:40:41 +08:00
parent 30b16fd5a8
commit 2f16e64a3d
4 changed files with 18 additions and 13 deletions

View File

@ -118,9 +118,9 @@ const handleRemove = async (file: UploadFile) => {
} }
}; };
const beforeUpload = (file: File) => { const beforeUpload = async (file: File) => {
const { maxSize, accept } = props; const { maxSize, accept } = props;
const isAct = checkFileType(file, accept); const isAct = await checkFileType(file, accept);
if (!isAct) { if (!isAct) {
message.error($t('component.upload.acceptUpload', [accept])); message.error($t('component.upload.acceptUpload', [accept]));
isActMsg.value = false; isActMsg.value = false;

View File

@ -1,20 +1,25 @@
import { fileTypeFromBlob } from '@vben/utils'; import { fileTypeFromBlob } from '@vben/utils';
/** /**
* TODO: file-upload暂时使用 * txt文件 @see https://github.com/sindresorhus/file-type/issues/55
*
* @param file file对象 * @param file file对象
* @param accepts () (image/png等 image/*) * @param accepts () (image/png等 image/*)
* @returns * @returns
*/ */
export function checkFileType(file: File, accepts: string[]) { export async function checkFileType(file: File, accepts: string[]) {
let reg; if (!accepts || accepts?.length === 0) {
if (!accepts || accepts.length === 0) { return true;
reg = /.(?:jpg|jpeg|png|gif|webp)$/i;
} else {
const newTypes = accepts.join('|');
reg = new RegExp(`${String.raw`\.(` + newTypes})$`, 'i');
} }
return reg.test(file.name); console.log(file);
const fileType = await fileTypeFromBlob(file);
if (!fileType) {
console.error('无法获取文件类型');
return false;
}
console.log('文件类型', fileType);
// 是否文件拓展名/文件头任意有一个匹配
return accepts.includes(fileType.ext) || accepts.includes(fileType.mime);
} }
/** /**

View File

@ -24,7 +24,7 @@ const [BasicModal, modalApi] = useVbenModal({
}, },
}); });
const accept = ref(['txt', 'excel', 'word', 'pdf']); const accept = ref(['xlsx', 'word', 'pdf']);
const maxNumber = ref(3); const maxNumber = ref(3);
const message = computed(() => { const message = computed(() => {

View File

@ -15,7 +15,7 @@ const fieldOptions = [
{ label: 'ossId', value: 'ossId' }, { label: 'ossId', value: 'ossId' },
{ label: '链接地址', value: 'url' }, { label: '链接地址', value: 'url' },
]; ];
const fileAccept = ['txt', 'excel', 'word', 'pdf']; const fileAccept = ['xlsx', 'word', 'pdf'];
const signleImage = ref<string>(''); const signleImage = ref<string>('');
</script> </script>