diff --git a/common/js/media-upload.js b/common/js/media-upload.js index d5cb469..30fa784 100644 --- a/common/js/media-upload.js +++ b/common/js/media-upload.js @@ -40,10 +40,16 @@ const EXT_MIME_MAP = { m4a: 'audio/mp4', flac: 'audio/flac', ogg: 'audio/ogg', oga: 'audio/ogg', opus: 'audio/opus', amr: 'audio/amr', wma: 'audio/x-ms-wma', aiff: 'audio/aiff', aif: 'audio/aiff', ape: 'audio/x-ape', mid: 'audio/midi', + // PR-AV-FULL-SUPPORT (2026-09-24): 全量音视频格式 (与后端 MediaUploadPolicy::guessMimeByExt 对齐) + midi: 'audio/midi', caf: 'audio/x-caf', mka: 'audio/x-matroska', ac3: 'audio/ac3', mp4: 'video/mp4', mov: 'video/quicktime', avi: 'video/x-msvideo', mkv: 'video/x-matroska', webm: 'video/webm', flv: 'video/x-flv', m4v: 'video/x-m4v', wmv: 'video/x-ms-wmv', '3gp': 'video/3gpp', mpeg: 'video/mpeg', mpg: 'video/mpeg', ts: 'video/mp2t', + '3g2': 'video/3gpp2', f4v: 'video/x-flv', mpe: 'video/mpeg', m2v: 'video/mpeg', + m2ts: 'video/mp2t', mts: 'video/mp2t', ogv: 'video/ogg', vob: 'video/mpeg', + asf: 'video/x-ms-asf', rm: 'application/vnd.rn-realmedia', + rmvb: 'application/vnd.rn-realmedia-vbr', divx: 'video/x-divx', doc: 'application/msword', docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', ppt: 'application/vnd.ms-powerpoint', diff --git a/pages_tool/ai-chat/components/ai-chat-tools-panel.vue b/pages_tool/ai-chat/components/ai-chat-tools-panel.vue index 77aa3da..053035f 100644 --- a/pages_tool/ai-chat/components/ai-chat-tools-panel.vue +++ b/pages_tool/ai-chat/components/ai-chat-tools-panel.vue @@ -220,7 +220,8 @@ export default { if (type.indexOf('audio/') === 0) return 'audio' if (type.indexOf('video/') === 0) return 'video' const ext = String((file && file.name) || '').split('.').pop().toLowerCase() - const audioExt = ['mp3', 'wav', 'aac', 'm4a', 'flac', 'ogg', 'oga', 'amr', 'wma', 'aiff', 'aif', 'opus', 'ape', 'mid'] + // PR-AV-FULL-SUPPORT (2026-09-24): 与后端 MediaUploadPolicy::allowedUploadExtensions 音频段对齐 + const audioExt = ['mp3', 'wav', 'aac', 'm4a', 'flac', 'ogg', 'oga', 'amr', 'wma', 'aiff', 'aif', 'opus', 'ape', 'mid', 'midi', 'caf', 'mka', 'ac3'] if (audioExt.indexOf(ext) !== -1) return 'audio' // 兜底: mime 为空且扩展名不认识的 (如 Windows 未关联的音频) 交给后端按 URL 判断, 先按音频走 return type ? 'video' : 'audio' @@ -297,7 +298,7 @@ export default { chooseFileApi({ count: 1, type: 'file', - extension: ['mp3', 'wav', 'aac', 'm4a', 'flac', 'ogg', 'amr', 'wma', 'aiff'], + extension: ['mp3', 'wav', 'aac', 'm4a', 'flac', 'ogg', 'oga', 'amr', 'wma', 'aiff', 'aif', 'opus', 'ape', 'mid', 'midi', 'caf', 'mka', 'ac3'], success: async (res) => { const file = (res.tempFiles && res.tempFiles[0]) || null if (!file) return @@ -315,7 +316,7 @@ export default { // #ifdef APP-PLUS uni.chooseFile({ count: 1, - extension: ['mp3', 'wav', 'aac', 'm4a', 'flac', 'ogg', 'amr'], + extension: ['mp3', 'wav', 'aac', 'm4a', 'flac', 'ogg', 'oga', 'amr', 'wma', 'aiff', 'aif', 'opus', 'ape', 'mid', 'midi', 'caf', 'mka', 'ac3'], success: async (res) => { const file = res.tempFiles[0] if (!file) return