uni.chooseImage的count参数必须显式指定(如count: 9),不可依赖默认值;sourceType必须为包含'album'和'camera'的数组以兼容iOS;tempFilePaths在H5可能为空,需fallback至res.tempFiles.map(f => f.path);多图上传须控制并发、校验文件并及时持久化临时路径。

uni.chooseImage 的 count 参数必须显式传数字
默认值虽然是 9,但很多开发者写 uni.chooseImage({}) 后发现 iOS 或 H5 只能选 1 张——因为部分平台(尤其是旧版微信小程序基础库)对未传 count 的行为不一致。务必写明:count: 9(或你需要的最大张数),不能依赖默认。
sourceType 必须是数组,且 iOS 要求至少两个选项
常见错误是只写 sourceType: ['album'],结果 iOS 上点击直接报错 “no suitable source”。iOS 系统强制要求弹窗前至少提供两种来源(哪怕其中一种不可用),所以得写成:sourceType: ['album', 'camera']。Android 和 H5 虽然允许单选项,但为跨端健壮性,统一按双选项处理更安全。
返回的 tempFilePaths 是字符串数组,但注意 H5 端可能为空
uni.chooseImage 成功回调里,res.tempFilePaths 是标准字符串数组,可直接用于 <image :src> 预览或 uni.uploadFile 上传。但 H5 端在某些浏览器(如 Safari)中,若用户通过文件选择框上传,tempFilePaths 可能为空,而实际路径藏在 res.tempFiles[0].path 里。建议加一层 fallback 判断:
const paths = res.tempFilePaths.length ? res.tempFilePaths : res.tempFiles.map(f => f.path);
多图上传时别直接 for 循环调 uni.uploadFile
并发太多容易触发小程序平台限流(微信限制 10 个并发),H5 端也可能被浏览器拦截。正确做法是控制并发数(比如 3 个一组),用 Promise 队列或 async/await + splice 分批处理。另外,每张图上传前最好检查 uni.getFileInfo 确认文件存在且大小合理,避免静默失败。
uni.saveFile 持久化,或把 base64 数据缓存到 uni.setStorageSync(仅小图适用)。


















