uni-app 视频和图片压缩API(compressVideo,compressImage)返回含中文的临时路径时,plus.io调取路径报错
uni-app 视频和图片压缩API(compressVideo,compressImage)返回含中文的临时路径时,plus.io调取路径报错
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 10 | HBuilderX |
示例代码:
实例如下:
compressImage()返回原始文件名路径,如_doc/.../中文.jpgcompressVideo()返回encodeURI后的文件路径,如:file:///storage/.../%E4%B8%AD%E6%96%87.mp4
### 操作步骤:
```javascript
uni.compressVideo({
src: path,
bitrate: bitrate,
fps: fps,
resolution: resolution,
success: (res) => {
plus.io.resolveLocalFileSystemURL(res.tempFilePath,(fileEntry)=>{});
}
})
### 预期结果:
plus.io.resolveLocalFileSystemURL可以正常解析路径
实际结果:
plus.io.resolveLocalFileSystemURL未能解析路径,报错“路径不存在”
### bug描述:
压缩包含中文路径的图片和视频时存在如下两个不统一:
1. 格式不同,image返回本地URL路径,video返回`file://`的绝对路径
2. 路径编码不同,image返回未经过编码的路径,video返回经过`encodeURI`的路径
如上问题,就会导致 `compressVideo`时返回的 `encodeURI` 的路径,再使用plus 的 `resolveLocalFileSystemURL` 方法报错 `路径不存在`
更多关于uni-app 视频和图片压缩API(compressVideo,compressImage)返回含中文的临时路径时,plus.io调取路径报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
decodeURIComponent 试试看
更多关于uni-app 视频和图片压缩API(compressVideo,compressImage)返回含中文的临时路径时,plus.io调取路径报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
是的compressVideo需要decode,但是compressImage就不用。我觉得这两个类似的API应该格式统一。
存在,看截图需要把带中文的路径,decodeURI后才能使用plus.io.resolveLocalFileSystemURL(decodeURI(res.temFilePath));
回复 IT小哥: 我理解错了,以后你decodeURI之后,不能使用呢
这是一个典型的路径编码处理问题。根据你的描述,问题核心在于compressVideo和compressImage两个API返回的临时路径格式和编码方式不一致。
问题分析:
compressImage返回的是相对路径(如_doc/.../中文.jpg),这种路径可以直接被plus.io相关方法识别compressVideo返回的是经过encodeURI编码的绝对路径(如file:///storage/.../%E4%B8%AD%E6%96%87.mp4),这种编码后的路径在某些情况下可能无法被正确解析
解决方案:
对于compressVideo返回的路径,在使用plus.io.resolveLocalFileSystemURL之前,需要先对路径进行解码处理:
uni.compressVideo({
src: path,
bitrate: bitrate,
fps: fps,
resolution: resolution,
success: (res) => {
// 对返回的路径进行解码
const decodedPath = decodeURI(res.tempFilePath);
plus.io.resolveLocalFileSystemURL(decodedPath, (fileEntry) => {
// 处理成功回调
}, (error) => {
console.error('解析文件失败:', error);
});
},
fail: (error) => {
console.error('压缩视频失败:', error);
}
});
补充建议:
为了统一处理,建议对所有可能包含中文的路径都进行解码处理:
function resolveFilePath(filePath) {
// 统一解码处理
return decodeURI(filePath);
}
// 使用时
const decodedPath = resolveFilePath(res.tempFilePath);
plus.io.resolveLocalFileSystemURL(decodedPath, callback);


