当前位置:首页 > uni-app

uniapp断点下载

2026-02-06 03:16:13uni-app

uniapp断点下载实现方法

在uniapp中实现断点下载功能,可以通过以下步骤完成:

使用uni.downloadFile API uniapp提供了uni.downloadFile方法用于文件下载,结合本地存储可实现断点续传功能。关键参数包括url(文件地址)和filePath(保存路径)。

获取已下载文件大小 通过uni.getFileInfo获取本地已下载文件的大小,用于后续设置请求头Range字段。示例代码:

uni.getFileInfo({
  filePath: tempFilePath,
  success: (res) => {
    const downloadedSize = res.size
  }
})

设置Range请求头 在下载请求中添加HTTP头Range,指定从已下载位置开始继续下载:

uni.downloadFile({
  url: 'https://example.com/file.zip',
  header: {
    'Range': `bytes=${downloadedSize}-`
  },
  success: (res) => {
    if (res.statusCode === 206) {
      // 断点续传成功
    }
  }
})

保存下载进度 使用uni.setStorageSync将当前下载进度保存到本地,应用重启时可读取进度:

// 保存进度
uni.setStorageSync('downloadProgress', {
  url: fileUrl,
  downloadedSize: currentSize
})

// 读取进度
const progress = uni.getStorageSync('downloadProgress')

合并文件片段 如果服务器支持分片下载,需要将多个分片合并为完整文件。可通过uni.saveFile和文件流操作实现:

uniapp断点下载

const fs = uni.getFileSystemManager()
fs.appendFile({
  filePath: finalPath,
  data: chunkData,
  success: () => {
    // 合并成功
  }
})

注意事项

  • 服务器必须支持Range请求,返回206 Partial Content状态码
  • 大文件下载建议分片处理,避免内存问题
  • 安卓平台需注意文件存储权限问题
  • iOS平台需在manifest.json中配置访问白名单

完整示例代码

let downloadTask = null

function startDownload(url) {
  const savedProgress = uni.getStorageSync(url)
  const downloadedSize = savedProgress ? savedProgress.downloadedSize : 0

  downloadTask = uni.downloadFile({
    url: url,
    header: { 'Range': `bytes=${downloadedSize}-` },
    success: (res) => {
      if (res.statusCode === 206) {
        uni.saveFile({
          tempFilePath: res.tempFilePath,
          success: (savedRes) => {
            console.log('文件保存成功', savedRes.savedFilePath)
          }
        })
      }
    }
  })

  downloadTask.onProgressUpdate((res) => {
    uni.setStorageSync(url, {
      downloadedSize: downloadedSize + res.totalBytesWritten
    })
  })
}

function pauseDownload() {
  if (downloadTask) {
    downloadTask.abort()
  }
}

标签: 断点uniapp
分享给朋友:

相关文章

uniapp模板库

uniapp模板库

uniapp模板库推荐 官方模板库 uni-app官方提供多个模板,涵盖电商、社交、新闻等多个领域。这些模板可直接在HBuilderX中通过新建项目选择,包含基础结构和常用功能模块,适合快速启动项目。…

uniapp安装uview

uniapp安装uview

安装uView到UniApp项目 方法一:通过npm安装(推荐) 确保项目已初始化npm,在项目根目录执行以下命令: npm install uview-ui 在main.js文件中引入并注册uV…

uniapp旋转横屏

uniapp旋转横屏

实现横屏模式的方法 在UniApp中实现横屏模式,可以通过配置页面方向或使用CSS旋转实现。以下是两种常见方法: 修改manifest.json配置 在项目的manifest.json文件中,找到"…

uniapp设置背景

uniapp设置背景

设置全局背景样式 在App.vue文件中添加全局样式,使用page选择器设置页面背景。这种方式会影响所有页面背景。 <style> page { background-col…

丸子uniapp

丸子uniapp

丸子UniApp简介 丸子UniApp是一个基于UniApp框架开发的移动应用解决方案,通常用于快速构建跨平台应用(如微信小程序、H5、Android/iOS等)。其核心特点是利用UniApp的“一次…

uniapp get

uniapp get

uniapp 获取数据的方法 在 uniapp 中获取数据可以通过多种方式实现,包括 API 请求、本地存储、页面传参等。以下是一些常见的方法: API 请求获取数据 使用 uni.request…