uni-app 安卓手机 uni.downloadFile 下载中文路径超过24个字图片报错400 ios端正常
uni-app 安卓手机 uni.downloadFile 下载中文路径超过24个字图片报错400 ios端正常
项目创建方式 | 开发环境 | 版本号 |
---|---|---|
HBuilderX | Windows | 4.24 |
操作步骤:
- 调用uni.downloadFile下载中文路径超过24个字的图片
预期结果:
- 可以正常下载图片
实际结果:
- uni.downloadFile进入success回调,但报错400
bug描述:
- 安卓手机,uni.downloadFile下载中文路径超过24个字的图片,报错400,ios端正常
更多关于uni-app 安卓手机 uni.downloadFile 下载中文路径超过24个字图片报错400 ios端正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app 安卓手机 uni.downloadFile 下载中文路径超过24个字图片报错400 ios端正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在 uni-app
中处理文件下载时,确实可能会遇到路径长度限制的问题,特别是在安卓设备上。这通常是由于安卓系统对文件路径长度的限制(通常是255个字符,但具体到路径中的各个部分,限制可能更严格,例如目录名或文件名长度限制)。当路径中包含中文字符时,由于UTF-8编码下中文字符占用更多字节,更容易触发这个限制。
以下是一个处理此问题的示例代码,通过简化保存文件的路径来避免长度超限的问题:
// 假设我们要下载的图片URL和原始保存路径(可能包含长中文路径)
const imageUrl = 'https://example.com/path/to/your/image.jpg';
const originalSavePath = '/storage/emulated/0/Downloads/一些非常长的中文路径可能会导致问题/image.jpg';
// 简化路径:只保留必要的目录结构,使用哈希值代替长文件名部分
const simplifiedDirName = 'downloads/' + crypto.createHash('md5').update(imageUrl).digest('hex').substring(0, 8); // 生成一个基于URL的短目录名
const simplifiedPath = `${uni.env.USER_DATA_PATH}/${simplifiedDirName}/image.jpg`;
// 创建目录(如果不存在)
const directoryPath = simplifiedPath.split('/').slice(0, -1).join('/');
uni.getFileSystemManager().mkdir({
dirPath: directoryPath,
recursive: true,
success: () => {
// 开始下载文件
uni.downloadFile({
url: imageUrl,
tempFilePath: simplifiedPath, // 使用简化后的路径
success: (res) => {
console.log('文件下载成功:', res.tempFilePath);
// 可以在这里进行后续操作,如保存到相册等
},
fail: (err) => {
console.error('文件下载失败:', err);
}
});
},
fail: (err) => {
console.error('创建目录失败:', err);
}
});
说明:
- 路径简化:使用URL的哈希值生成一个较短的目录名,避免路径过长。
- 目录创建:在下载文件前,确保目标目录存在,使用
uni.getFileSystemManager().mkdir
方法递归创建目录。 - 下载文件:使用
uni.downloadFile
方法下载文件,指定简化后的路径作为tempFilePath
。
这种方法通过哈希算法缩短了路径长度,同时保持了路径的唯一性,有效避免了路径长度超限的问题。注意,根据具体需求,你可能需要调整哈希算法或目录结构以适应不同的应用场景。