美文网首页
Flutter大文件实现分块上传和断点续传

Flutter大文件实现分块上传和断点续传

作者: 没有小叮当的大雄 | 来源:发表于2023-07-26 13:54 被阅读0次

最近在搞flutter的大文件上传功能,记录一下断点续传的视线
1.将文件进行分块,我们和后台约定的是3M每块

static const int partSize = 1024 * 1024 * 3; //3m每块
///上传文件 后台要记录从第几块开始传,也就是currentPart
Future<bool> _uploadZip(String path) async {
    File file = File(path);
    String fileName = FileUtil.getBaseName(file.path);
    int fileSize = file.lengthSync(); //文件总大小
    int totalPart = (fileSize * 1.0 / partSize).ceil(); //分块总数 向上取整
    int currentPart = currentPart; //当前要传第几块 由后台记录返回的
   
   //开启循环上传每一块
    while (currentPart < totalPart) {
      bool isOK = await _uploadPart(file, currentPart, totalPart, fileSize, fileName);
      if (!isOK) {
        invokeStateListener(ProgressState.error, null);
        return false;
      }
      //更新进度
      invokeProgressListeners((currentPart + 1) * 1.0 / totalPart);
      currentPart++;
    }
    //所有分快上传成功
    invokeStateListener(ProgressState.complete, null);
    return true;
  }

2.将每一个分块上传到后台,并记录上传是否成功

Future<bool> _uploadPart(File file, int currentPart, int totalPart, int fileSize, String fileName) async {
    //开始读文件的位置     
    int start = currentPart * partSize; 
    //读取文件的长度 注意不要让长度超过总长度
    var length = (start + partSize > fileSize) ? (fileSize - start) : partSize; 

    RandomAccessFile raf = file.openSync(mode: FileMode.read);
    raf.setPositionSync(start);
    Uint8List data = raf.readSync(length);//从文件总长度中截取出要上传的长度

    Map<String, dynamic> map = {};
    map['total'] = totalPart; //总块数
    map['currentPart'] = currentPart; //当前上传到第几块
    map['part'] = MultipartFile.fromBytes(data, filename:'随便设置文件名');//当前快的数据 

    Map<String, dynamic>? response = await 真正的上传函数
    //自定义逻辑 失败的话返回false
 
    return true;
  }

相关文章

  • 文件上传下载技术

    上传技术 1.直接上传 2.大文件上传 1)分块上传 主要分块数,快的大小,md5值(秒传实现) 2)断点上传 主...

  • 文件太大如何分块压缩?BetterZip简单搞定!

    为什么大文件需要分块压缩?首先,因为网络传输是存在time-out参数的,部分网站不支持断点续传,当文件上传时间过...

  • IOS 断点续传原理浅析(第一篇)

    断点续传概述: 断点续传就是从文件上次中断的地方开始重新下载或上传数据,当下载大文件的时候,如果没有实现断点续传功...

  • iOS-16 断点续传 下载

    断点续传概述: 断点续传就是从文件上次中断的地方开始重新下载或上传数据,当下载大文件的时候,如果没有实现断点续传功...

  • 大文件分块上传

    大致步骤 1 图片分块 2 分块的图片 用formdata 保存在发后台 代码实现

  • vue-simple-uploader组件的一些使用心得

    前言 因为项目需要上传大文件,考虑使用分片上传、断点续传这些功能故选用vue-simple-uploader,期间...

  • php+文件夹上传实例

    核心原理: 该项目核心就是文件分块上传。前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中...

  • 大文件分块(切片)断点上传

    之前看过相关文章但是一直没有动手实现,这个东西就是为了实现这个而产生的。 前端流程图 主要技术点 切片 利用 Bl...

  • iOS大文件的分片上传和断点上传

    由于最近比较忙,所以一直没有写博客,现在分享一些大文件的上传的问题!断点续传和分片上传。因为文件过大(比如1G以上...

  • 无插件实现大文件分片上传,断点续传

    1. 简介: 本篇文章基于实际项目的开发,将介绍项目中关于大文件分片上传、文件验证、断点续传、手动重试上传等需求的...

网友评论

      本文标题:Flutter大文件实现分块上传和断点续传

      本文链接:https://www.haomeiwen.com/subject/gkjkpdtx.html