uni-app ios端使用uni.compressVideo压缩视频后,将tempFilePath地址传入uni.saveFile显示不可读

发布于 1周前 作者 h691938207 来自 Uni-App

uni-app ios端使用uni.compressVideo压缩视频后,将tempFilePath地址传入uni.saveFile显示不可读

项目信息 详情
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 23H2
HBuilderX类型 正式
HBuilderX版本号 4.36
手机系统 iOS
手机系统版本号 iOS 16
手机厂商 苹果
手机机型 苹果13proMAX
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码:

let that = this  
uni.chooseVideo({  
    camera: 'back',  
    sourceType: ['album', 'camera'],  
    maxDuration: 0,  
    compressed: false,  
    success: (res) => {  
        console.log(res)  
        uni.compressVideo({  
            src: res.tempFilePath,  
            quality: 'medium',  
            success(re) {  
                console.log(re)  
                // that.src  = re.tempFilePath;  
                // return  
                uni.saveFile({  
                    tempFilePath: re.tempFilePath,  
                    success: function(res2) {  
                        console.log(res2)  
                        that.src  = res2.savedFilePath;  

                    },  
                    fail:function(err){  
                        console.log(err)  
                    }  
                });  
            },  
            fail:function(err){  
                console.log(err)  
            }  
        })  
    },  
    fail: (err) => {  
        console.log(err)  
    },  
    complete: (ces) => {  
        console.log(ces)  
    }  
})  

操作步骤:

  • 使用uni.chooseVideo选择或者录制视频后
  • 使用uni.compressVideo进行压缩
  • 使用压缩后的tempFilePath传入uni.saveFile保存到本地

预期结果:

  • 安卓端 ios可以正常播放使用uni.saveFile中success返回结果

实际结果:

  • 安卓端正常播放
  • ios端显示file不允许读
  • {
  • "errMsg": "saveFile:fail 不允许读",
  • "errCode": 4,
  • "code": 4
  • }

bug描述:

在ios端uni.chooseVideo录制视频以后,uni.compressVideo进行压缩,输出的tempFilePath可以正常播放,但使用uni.saveFile保存到本地后显示 “saveFile:fail 不允许读” 安卓端无异常


2 回复

测试了一下 hbuilderx4.23版本可以使用 4.26版本就报错了


在uni-app中处理视频压缩并保存时,确实可能会遇到一些兼容性和路径问题。对于你提到的在iOS端使用uni.compressVideo压缩视频后,将tempFilePath地址传入uni.saveFile显示不可读的问题,这通常是因为文件路径处理不当或文件权限问题。以下是一个示例代码,展示了如何在uni-app中压缩视频并保存到文件系统:

// 假设你有一个视频文件的路径,比如 videoPath
let videoPath = '/path/to/your/video.mp4';

// 使用 uni.compressVideo 压缩视频
uni.compressVideo({
    src: videoPath,
    quality: 'high', // 可以选择 'high', 'medium', 'low'
    success: (res) => {
        console.log('Video compressed successfully:', res);
        let compressedVideoPath = res.tempFilePath;

        // 构造保存文件的路径和名称
        let savePath = `${uni.env.USER_DATA_PATH}/compressed_video.mp4`;

        // 使用 uni.saveFile 保存压缩后的视频文件
        uni.saveFile({
            tempFilePath: compressedVideoPath,
            filePath: savePath,
            success: (saveRes) => {
                console.log('File saved successfully:', saveRes);
                // saveRes.savedFilePath 是文件的保存路径
                console.log('Saved file path:', saveRes.savedFilePath);
                // 可以在这里进行后续操作,比如上传或展示文件
            },
            fail: (err) => {
                console.error('Failed to save file:', err);
                // 处理保存失败的情况
            }
        });
    },
    fail: (err) => {
        console.error('Failed to compress video:', err);
        // 处理压缩失败的情况
    }
});

注意事项:

  1. 路径问题:确保videoPath是有效的视频文件路径。uni.env.USER_DATA_PATH是应用沙盒内的路径,通常用于存储临时或持久性文件。
  2. 权限问题:在iOS上,应用沙盒内的文件访问通常不受限制,但如果你试图访问其他位置的文件,可能需要额外的权限。确保你的应用有适当的文件访问权限。
  3. 文件大小和质量uni.compressVideoquality参数影响压缩后的文件大小和质量。根据需求选择合适的压缩级别。
  4. 错误处理:始终处理successfail回调,以便在出现问题时能够适当响应。

通过上述代码,你应该能够成功在uni-app的iOS端压缩视频并将其保存到应用沙盒内。如果仍然遇到问题,请检查文件路径和权限设置。

回到顶部