uni-app ios端使用uni.compressVideo压缩视频后,将tempFilePath地址传入uni.saveFile显示不可读
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);
// 处理压缩失败的情况
}
});
注意事项:
- 路径问题:确保
videoPath
是有效的视频文件路径。uni.env.USER_DATA_PATH
是应用沙盒内的路径,通常用于存储临时或持久性文件。 - 权限问题:在iOS上,应用沙盒内的文件访问通常不受限制,但如果你试图访问其他位置的文件,可能需要额外的权限。确保你的应用有适当的文件访问权限。
- 文件大小和质量:
uni.compressVideo
的quality
参数影响压缩后的文件大小和质量。根据需求选择合适的压缩级别。 - 错误处理:始终处理
success
和fail
回调,以便在出现问题时能够适当响应。
通过上述代码,你应该能够成功在uni-app的iOS端压缩视频并将其保存到应用沙盒内。如果仍然遇到问题,请检查文件路径和权限设置。