腾讯IM在微信H5/uni-app中文件发送失败是因误用uni.chooseMedia而非uni.chooseMessageFile,且未按微信返回类型(File或tempFilePath)正确构造File对象并传入TIM SDK。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

腾讯IM在H5或uni-app应用中选中微信文件后界面无响应、消息未发送、控制台也无报错,本质是微信环境对File对象的限制与IM SDK参数预期不匹配导致的中断。
确认是否处于微信内置浏览器环境
用微信打开H5页面时,uni.chooseMessageFile(而非uni.chooseMedia)才是正确API;若误用chooseMedia,在微信中会静默失败且无提示。
检查代码中是否写了uni.chooseMedia({ sourceType: ['album', 'camera'] })——这只能选图片/视频,【无法选取微信聊天中的任意文件】。
必须改用uni.chooseMessageFile,它专为微信环境设计,能唤起微信“最近文件”列表。
微信环境下调用chooseMessageFile的正确写法
方法一:基础调用(推荐优先验证)
直接调用uni.chooseMessageFile({ count: 1 }),成功后res.tempFiles[0]是一个标准File对象,可直接传给TIM SDK的createFileMessage。
方法二:兼容性兜底(当部分安卓微信版本返回tempFilePath而非File时)
让 AI 读懂微信公众号。自研 7 阶段提取管道,穿透反爬率 99.89%,Token 消耗降低 50%–87%。支持 ChatGPT、Claude、Perplexity、Gemini 等平台无缝引用。
若res.tempFiles[0].name为空或size为0,说明微信返回的是临时路径而非真实File对象。此时需用uni.getFileSystemManager().readFile读取二进制内容,再用new File([arrayBuffer], filename, { type: mimeType })手动构造File对象。
注意:mimeType不能硬编码为application/octet-stream,应根据文件扩展名动态映射,例如.xlsx → application/vnd.openxmlformats-officedocument.spreadsheetml.sheet。
传入TIM SDK前的关键校验步骤
第一步:检查res.tempFiles是否存在且长度大于0
第二步:打印res.tempFiles[0].constructor.name,确认是File还是Object
第三步:若为Object且含tempFilePath字段,则必须走readFile → arrayBuffer → new File()流程,否则TIM会因file.size为undefined而静默丢弃消息。
第四步:构造tim.createFileMessage时,payload中file字段必须是原生File实例,不能是res整个对象,也不能是res.tempFiles数组——【传错类型会导致消息创建失败且无任何错误提示】。


















