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);
  }
});

说明:

  1. 路径简化:使用URL的哈希值生成一个较短的目录名,避免路径过长。
  2. 目录创建:在下载文件前,确保目标目录存在,使用uni.getFileSystemManager().mkdir方法递归创建目录。
  3. 下载文件:使用uni.downloadFile方法下载文件,指定简化后的路径作为tempFilePath

这种方法通过哈希算法缩短了路径长度,同时保持了路径的唯一性,有效避免了路径长度超限的问题。注意,根据具体需求,你可能需要调整哈希算法或目录结构以适应不同的应用场景。

回到顶部