Files
yudao-ui-admin-vben/apps/web-antd/src/views/mp/hooks/useUpload.ts
2025-11-27 09:55:24 +08:00

78 lines
1.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { message } from 'ant-design-vue';
// TODO @xingyu这种要想办法全局共享起来么
import { $t } from '#/locales';
export enum UploadType {
Image = 'image',
Video = 'video',
Voice = 'voice',
}
interface UploadTypeConfig {
allowTypes: string[];
maxSizeMB: number;
i18nKey: string;
}
export interface UploadRawFile {
name: string;
size: number;
type: string;
}
const UPLOAD_CONFIGS: Record<UploadType, UploadTypeConfig> = {
[UploadType.Image]: {
allowTypes: [
'image/jpeg',
'image/png',
'image/gif',
'image/bmp',
'image/jpg',
],
maxSizeMB: 2,
i18nKey: 'mp.upload.image',
},
[UploadType.Video]: {
allowTypes: ['video/mp4'],
maxSizeMB: 10,
i18nKey: 'mp.upload.video',
},
[UploadType.Voice]: {
allowTypes: [
'audio/mp3',
'audio/mpeg',
'audio/wma',
'audio/wav',
'audio/amr',
],
maxSizeMB: 2,
i18nKey: 'mp.upload.voice',
},
};
export const useBeforeUpload = (type: UploadType, maxSizeMB?: number) => {
const fn = (rawFile: UploadRawFile): boolean => {
const config = UPLOAD_CONFIGS[type];
const finalMaxSize = maxSizeMB ?? config.maxSizeMB;
// 格式不正确
if (!config.allowTypes.includes(rawFile.type)) {
const typeName = $t(config.i18nKey);
message.error($t('mp.upload.invalidFormat', [typeName]));
return false;
}
// 大小不正确
if (rawFile.size / 1024 / 1024 > finalMaxSize) {
const typeName = $t(config.i18nKey);
message.error($t('mp.upload.maxSize', [typeName, finalMaxSize]));
return false;
}
return true;
};
return fn;
};