高祥栋
高祥栋
  • 发布:2026-03-06 16:27
  • 更新:2026-03-06 16:52
  • 阅读:29

uniapp ios小程序调用uni.saveVideoToPhotosAlbu报错 安卓没有问题

分类:uni-app

【保存视频】保存到相册失败,完整错误信息: {errMsg: "saveVideoToPhotosAlbum:fail invalid video"}   

代码saveVideo(videoUrl) {
// 打印1:原始视频URL(确认传入地址无误)
console.log('【保存视频】尝试保存的视频URL:', videoUrl);
// 1. 校验URL是否为合法网络地址
if (!/^https?:\/\/.+/.test(videoUrl)) {
uni.showToast({
title: '视频地址无效,仅支持网络HTTPS地址',
icon: 'none'
});
console.error('【保存视频】URL校验失败:非合法HTTPS网络地址');
return;
}
// 3. 申请相册写入授权
uni.authorize({
scope: 'scope.writePhotosAlbum',
success: () => {
uni.showLoading({
title: '正在下载视频',
mask: true
}); // 加mask防止误操作
console.log('【保存视频】相册授权成功,开始下载视频文件');
// 4. 下载视频文件
uni.downloadFile({
url: videoUrl,
timeout: 30000, // 增加超时时间(30秒),适配大文件
success: (downloadRes) => {
uni.hideLoading();
// 打印2:下载完整结果(状态码、临时路径、响应头)—— 核心定位跨域/文件类型问题
console.log('【保存视频】下载文件成功,结果:', downloadRes);
// 5. 校验下载结果:状态码200 + 临时文件路径存在 + 路径含视频后缀
const isValid = downloadRes.statusCode === 200 &&
downloadRes.tempFilePath &&
/.(mp4|mov|avi)$/i.test(downloadRes.tempFilePath);

                            if (isValid) {  
                                uni.showLoading({  
                                    title: '正在保存到相册',  
                                    mask: true  
                                });  
                                console.log('【保存视频】下载文件校验通过,开始保存到相册,临时路径:', downloadRes  
                                    .tempFilePath);  
                                // 6. 保存视频到相册  
                                uni.saveVideoToPhotosAlbum({  
                                    filePath: downloadRes.tempFilePath,  
                                    success: () => {  
                                        uni.hideLoading();  
                                        uni.showToast({  
                                            title: '视频保存成功',  
                                            icon: 'success',  
                                            duration: 2000  
                                        });  
                                        console.log('【保存视频】视频成功保存到手机相册');  
                                    },  
                                    fail: (err) => {  
                                        uni.hideLoading();  
                                        // 打印3:保存相册失败详情(完整err对象,含错误码/错误信息)  
                                        console.error('【保存视频】保存到相册失败,完整错误信息:',  
                                            err);  
                                        // 特殊报错处理:授权拒绝/文件无效/系统不支持  
                                        if (err.errMsg.includes('auth deny')) {  
                                            uni.showModal({  
                                                title: '授权失败',  
                                                content: '需要开启「保存到相册」权限才能继续',  
                                                confirmText: '去开启',  
                                                success: (res) => {  
                                                    if (res.confirm)  
                                                        uni  
                                                        .openSetting(); // 打开小程序权限设置页  
                                                }  
                                            });  
                                        } else if (err.errMsg.includes(  
                                                'invalid video')) {  
                                            uni.showToast({  
                                                title: '保存失败:视频文件无效/编码不兼容',  
                                                icon: 'none',  
                                                duration: 3000  
                                            });  
                                        } else {  
                                            uni.showToast({  
                                                title: '保存失败:' + err  
                                                    .errMsg,  
                                                icon: 'none'  
                                            });  
                                        }  
                                    }  
                                });  
                            } else {  
                                // 打印4:下载文件校验失败详情(定位哪条校验不通过)  
                                console.error('【保存视频】下载文件校验失败,校验项结果:', {  
                                    statusCodeIs200: downloadRes.statusCode === 200,  
                                    hasTempFilePath: !!downloadRes.tempFilePath,  
                                    hasVideoSuffix: /\.(mp4|mov|avi)$/i.test(  
                                        downloadRes.tempFilePath || '')  
                                });  
                                uni.showToast({  
                                    title: '视频下载失败,可能是域名未配置/跨域问题',  
                                    icon: 'none',  
                                    duration: 3000  
                                });  
                            }  
                        },  
                        fail: (err) => {  
                            uni.hideLoading();  
                            // 打印4:下载网络失败详情  
                            console.error('【保存视频】视频下载网络失败,完整错误:', err);  
                            uni.showToast({  
                                title: '网络错误,下载失败',  
                                icon: 'none'  
                            });  
                        }  
                    });  
                },  
                fail: (err) => {  
                    // 打印:授权失败详情  
                    console.error('【保存视频】相册授权失败,错误信息:', err);  
                    // 授权失败,引导用户手动开启  
                    uni.showModal({  
                        title: '需要授权',  
                        content: '保存视频需要「访问相册」权限,是否去开启?',  
                        confirmText: '去开启',  
                        cancelText: '取消',  
                        success: (res) => {  
                            if (res.confirm) uni.openSetting(); // 打开小程序权限设置页面  
                        }  
                    });  
                }  
            });  
        },
2026-03-06 16:27 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

根据知识库内容,uni.saveVideoToPhotosAlbumiOS 微信小程序 平台下确实存在兼容性限制,且你遇到的错误 saveVideoToPhotosAlbum:fail invalid video 是平台行为差异导致的常见问题。

✅ 问题定位依据(来自知识库):


✅ 解决方案(基于知识库建议):

✅ 1. 确保视频格式为 iOS 支持的编码

  • 推荐使用 H.264 编码的 MP4 格式
  • 避免使用 HEVC、MOV、AVI 等格式,iOS 微信小程序可能无法识别。

✅ 2. 使用 uni.chooseMedia 替代 uni.downloadFile

  • uni.chooseMedia 会返回系统已验证的临时路径,避免格式不兼容问题。
  • 示例代码(来自知识库):
    uni.chooseMedia({  
    count: 1,  
    mediaType: ['video'],  
    sourceType: ['album'],  
    success(res) {  
    const tempFilePath = res.tempFiles[0].tempFilePath;  
    uni.saveVideoToPhotosAlbum({  
      filePath: tempFilePath,  
      success: () => {  
        uni.showToast({ title: '保存成功', icon: 'success' });  
      },  
      fail: (err) => {  
        console.error('保存失败:', err);  
      }  
    });  
    }  
    });

✅ 3. 检查视频文件是否完整下载

  • uni.downloadFile 成功后,务必确认 tempFilePath 文件存在且可播放
  • 可通过 uni.getVideoInfo 验证视频是否有效:
    uni.getVideoInfo({  
    src: tempFilePath,  
    success: () => {  
    // 视频有效,继续保存  
    },  
    fail: () => {  
    uni.showToast({ title: '视频文件无效', icon: 'none' });  
    }  
    });

⚠️ 注意事项(来自知识库):

  • 微信小程序需配置隐私协议(2023年10月17日后强制要求):
    微信小程序隐私协议配置指南
  • iOS 微信小程序不支持直接保存网络视频,必须通过 downloadFilechooseMedia 获取本地路径。

✅ 总结

你当前的问题是由于 iOS 微信小程序对视频格式和来源的严格限制 导致的。建议:

  1. 改用 uni.chooseMedia 获取视频(兼容性更好);
  2. 确保视频为 H.264 编码的 MP4
  3. 使用 uni.getVideoInfo 验证文件有效性

如需进一步调试,可上传一个符合上述条件的测试视频,确认是否为格式问题。

内容为 AI 生成,仅供参考
高祥栋

高祥栋 (作者) - 111

测试视频https://yundongnet.oss-cn-hangzhou.aliyuncs.com/addorder/2026-03-05/202603052139103c5e47714.mp4

DCloud_UNI_yuhe

DCloud_UNI_yuhe

你好, 你说的 ios小程序 是哪家的小程序

  • 高祥栋 (作者)

    微信小程序

    2026-03-06 17:23

要回复问题请先登录注册