uniapp如何下载文件到本地

在uniapp中,如何实现文件下载到本地功能?我试了uni.downloadFile能获取临时路径,但不知道怎么保存到手机存储中,尤其是Android和iOS路径处理有什么区别?需要额外插件吗?保存后如何在系统相册或文件管理器里看到下载的文件?求具体代码示例和权限配置方法。

2 回复

使用uni.downloadFile下载文件,再通过uni.saveFile保存到本地。注意:小程序需用户授权,H5端可能有限制。


在 UniApp 中,下载文件到本地可以通过 uni.downloadFile API 实现。以下是详细步骤和示例代码:

步骤说明:

  1. 使用 uni.downloadFile 下载文件到临时路径。
  2. 通过 uni.saveFile 将临时文件保存到本地永久存储(可选,适用于需要持久化的情况)。
  3. 使用 uni.openDocument 打开文件(如 PDF、图片等,可选)。

示例代码:

// 下载文件
uni.downloadFile({
  url: 'https://example.com/yourfile.pdf', // 文件URL
  success: (res) => {
    if (res.statusCode === 200) {
      // 下载成功,res.tempFilePath 为临时文件路径
      console.log('下载成功,临时路径:', res.tempFilePath);
      
      // 可选:保存到本地永久存储
      uni.saveFile({
        tempFilePath: res.tempFilePath,
        success: (saveRes) => {
          console.log('保存成功,本地路径:', saveRes.savedFilePath);
          uni.showToast({ title: '文件已保存', icon: 'success' });
        },
        fail: (err) => {
          console.error('保存失败:', err);
          uni.showToast({ title: '保存失败', icon: 'none' });
        }
      });

      // 可选:直接打开文件(如PDF)
      uni.openDocument({
        filePath: res.tempFilePath,
        success: () => console.log('打开文档成功'),
        fail: (err) => console.error('打开文档失败:', err)
      });
    }
  },
  fail: (err) => {
    console.error('下载失败:', err);
    uni.showToast({ title: '下载失败', icon: 'none' });
  }
});

注意事项:

  • 临时与永久存储downloadFile 下载的文件默认存于临时目录,应用关闭后可能被清理。使用 saveFile 可转为永久存储。
  • 文件类型支持openDocument 支持常见格式(如 PDF、Word、Excel)。部分格式需依赖系统应用。
  • 网络权限:确保 manifest.json 中配置了网络请求权限。
  • 路径处理:H5 端部分浏览器可能限制文件保存,需测试兼容性。

根据需求选择保存或直接打开即可。

回到顶部