uni-app无跨端“点击复制图片到相册”统一API:小程序和App需用uni.saveImageToPhotosAlbum保存本地路径图片,H5只能触发下载;必须先通过uni.downloadFile或uni.getImageInfo获取本地路径,配置合法域名,分步检查并申请scope.writePhotosAlbum权限,否则iOS静默失败。

uni-app 没有“点击复制图片到相册”这个统一行为——所谓“复制”,在不同端实际是“保存到相册”或“触发下载”,且 H5 根本不支持相册操作。
uni.saveImageToPhotosAlbum 只在小程序和 App 有效
这个 API 的作用是把本地文件路径写入系统相册,不是复制到剪贴板。它在 H5 下直接报错 saveImageToPhotosAlbum is not a function,不能用。
- 必须传
filePath,不能直接传网络地址(如https://xxx.jpg) - 小程序中要用
uni.getImageInfo或uni.downloadFile先拿到本地路径;App 端虽可直传 URL,但 iOS 常静默失败,建议统一走uni.downloadFile流程 - 微信/支付宝小程序需提前在后台配置「downloadFile 合法域名」,否则
getImageInfo或下载会失败 - 失败时
err.errMsg若含auth deny,说明权限未开
权限检查必须分三步走,跳过任何一步都可能静默失败
iOS 尤其严格:未授权时调用 uni.saveImageToPhotosAlbum 不报错、不弹窗、不提示,用户完全无感知。
- 先调
uni.getSetting,读取res.authSetting['scope.writePhotosAlbum'] - 若为
undefined或false,立即调uni.authorize请求权限 - 若
authorize失败(用户点“不允许”),必须调uni.openSetting跳转设置页——iOS 14+ 后首次拒绝无法再弹窗,只能手动开启 - 切勿把权限检查和保存逻辑写在同一层回调里,异步顺序错乱会导致权限未生效就执行保存
H5 端只能触发下载,别试图“保存到相册”
H5 没有系统相册概念,uni.saveImageToPhotosAlbum 无效,navigator.clipboard.write 也不允许写入图片(浏览器策略禁止)。
- 同域图片:用
<a :href="url" download>,href必须同源或服务端配了Access-Control-Allow-Origin: * - 跨域图(如 CDN):需用
canvas+image.crossOrigin = "anonymous"转 base64,再生成 Blob URL 绑定到href;但 Safari 常忽略download属性 - 绝对不要用
document.execCommand('copy')处理图片——它只对文本有效,对canvas.toDataURL()结果无效
最易被忽略的点是:网络图片在真机上失败,往往不是代码问题,而是域名没配白名单、HTTPS 证书不被信任、或图片超 10MB(微信限制)。调试时务必在真机上验证,工具模拟器会掩盖这些问题。


















