uniapp如何下载文件流并保存到本地

在uniapp中如何下载文件流并保存到本地?我尝试使用uni.downloadFile下载文件,但不知道如何将返回的文件流保存为本地文件。希望能提供一个完整的示例代码,包括如何处理下载后的临时路径和保存到本地的具体步骤。

2 回复

使用uni.downloadFile下载文件,返回临时路径。再用uni.saveFile保存到本地,注意仅支持保存图片和视频。


在 UniApp 中下载文件流并保存到本地,可以使用 uni.downloadFileuni.saveFile API。以下是详细步骤和示例代码:

步骤:

  1. 下载文件:使用 uni.downloadFile 获取文件临时路径。
  2. 保存文件:通过 uni.saveFile 将临时文件保存到本地永久存储。

示例代码:

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

注意事项:

  • 权限配置:在 manifest.json 中确保已配置网络请求权限(如 https 域名)。
  • 文件类型:支持常见格式(如 PDF、图片、文本等),但部分格式可能受平台限制。
  • 临时与永久路径:下载后文件为临时路径,需通过 saveFile 转为永久存储(仅小程序端有效,H5 端需使用浏览器下载逻辑)。
  • H5 端适配:H5 中 uni.saveFile 不可用,需用 uni.downloadFile 直接触发浏览器下载。

扩展场景:

若需保存到相册(如图片),可使用 uni.saveImageToPhotosAlbum

以上方法适用于多数文件下载需求,根据实际平台调整逻辑即可。

回到顶部