uniapp如何下载文件到系统公共目录

在uniapp中如何实现将文件下载到系统的公共目录?比如下载到Android的Downloads文件夹或者iOS的公共存储区域。使用uni.downloadFile只能保存到应用内部目录,尝试过plus.io和native.js但没成功。请问有没有完整的代码示例或解决方案?需要兼容多平台。

2 回复

在uniapp中,使用uni.downloadFile下载文件后,通过uni.saveFile保存到系统公共目录。但注意:H5端无法直接访问系统目录,需用户手动保存;App端需申请存储权限。


在 UniApp 中下载文件到系统公共目录(如 Android 的 Downloads 文件夹),可以使用 uni.downloadFile 下载文件,然后通过 uni.saveFile 保存到系统公共目录。以下是具体步骤和代码示例:

步骤说明:

  1. 下载文件:使用 uni.downloadFile 获取临时文件路径。
  2. 保存到公共目录:通过 uni.saveFile 将临时文件移动到系统 Downloads 目录(或其他公共目录)。

代码示例:

// 下载文件到系统公共目录
uni.downloadFile({
  url: 'https://example.com/yourfile.pdf', // 文件下载链接
  success: (res) => {
    if (res.statusCode === 200) {
      // 获取临时文件路径
      const tempFilePath = res.tempFilePath;
      
      // 保存到系统公共目录(如 Downloads)
      uni.saveFile({
        tempFilePath: tempFilePath,
        success: (saveRes) => {
          uni.showToast({
            title: '文件已保存到下载目录',
            icon: 'success'
          });
          console.log('文件保存路径:', saveRes.savedFilePath);
        },
        fail: (err) => {
          uni.showToast({
            title: '保存失败',
            icon: 'none'
          });
          console.error('保存失败:', err);
        }
      });
    }
  },
  fail: (error) => {
    uni.showToast({
      title: '下载失败',
      icon: 'none'
    });
    console.error('下载失败:', error);
  }
});

注意事项:

  • 平台差异uni.saveFile 在 Android 上默认保存到 Downloads 目录,iOS 可能受沙盒限制,无法直接保存到系统公共目录。
  • 权限配置
    • Android 需在 manifest.json 中添加存储权限:
      "permissions": {
        "writeExternalStorage": true
      }
      
    • iOS 无直接公共目录写入权限,通常保存到应用沙盒,用户可通过“文件”应用手动导出。
  • 文件类型:确保下载链接有效,且设备有足够存储空间。

替代方案(Android):

如需更精确控制路径,可使用原生插件(如 uni-app 官方未直接支持系统目录写入时)。

以上方法适用于大多数场景,如有复杂需求可考虑平台特定扩展。

回到顶部