我的网站开发技术经验总结 我的网站开发技术经验总结
首页

fangdown

我的网站开发技术经验总结
首页
  • 大前端

  • 基础

    • js

      • 你知道new操作符是如何实现的吗
      • 说说大文件上传的思路
        • 是什么
        • 解决方法
          • 分片上传
          • 断点续传
        • 使用场景
      • 说说对闭包的理解及应用
      • 说说对单点登录sso的理解
      • 说说对防抖节流的理解
      • 说说对函数式编程的理解
      • 说说对内存泄漏的理解及触发场景
      • 说说对事件模型的理解
      • 说说对事件委托的理解及应用场景
      • 说说对原型及原型链的理解
      • 说说对正则表达式的理解
      • 说说对BOM的理解及常见操作
      • 说说对Dom的理解及常见操作
      • 说说对JavaScript中事件循环的理解
      • 说说对js的执行上下文的理解
      • 说说对js中变量作用域的理解
      • 说说对js中继承的理解及实现方式
      • 说说对this关键字的理解
      • 说说你对 Immutable Data的理解?如何应用在React项目中
      • 说说如何判断数据类型
      • 说说如何判断一个元素在可视区域内
      • 说说如何实现函数缓存
      • 说说深浅拷贝的区别及实现
      • 说说什么是尾递归及其应用
      • 说说为什么0.1+0.2!==0.3
      • 说说下拉刷新,上拉加载的原理
      • 说说ajax的实现原理
      • 说说call-apply-bind的作用及区别
      • 说说js中本地存储有哪些方式及区别
      • 说说js中的类型转换机制
      • Javscript数组的常用方法有哪些?
      • Javscript字符串的常用方法有哪些?
    • css

    • ES6

  • 框架

  • 情商

  • 算法

  • 网络

  • 千锤百炼
  • 基础
  • js
fangdown
2021-09-03
目录

说说大文件上传的思路

# 是什么

大文件上传时遇到异常情况中断后, 全部重新上传,比较费事费力

  • 网络中断
  • 网络波动
  • 请求超时

# 解决方法

  • 分片上传
  • 断点续传

# 分片上传

  • 把大文件按一定规则分割成相同大小的数据块
  • 初始化一个分片上传任务,返回本次分片上传的唯一标识
  • 按一定策略(串行或并行)发送各个数据块
  • 发送完成后,服务端判断是否完整,合并成原始文件, 并返回结果

# 断点续传

  • 询问服务器,获取上传数据块

const input = document.querySelector("input");
input.addEventListener("change", function() {
  var file = this.files[0];

  const md5code = md5(file);

  var reader = new FileReader();
  reader.readAsArrayBuffer(file);
  reader.addEventListener("load", function(e) {
    //每10M切割一段,这里只做一个切割演示,实际切割需要循环切割,
    var slice = e.target.result.slice(0, 10 * 1024 * 1024);

    const formdata = new FormData();
    formdata.append("0", slice);
    //这里是有一个坑的,部分设备无法获取文件名称,和文件类型,这个在最后给出解决方案
    formdata.append("filename", md5code + file.filename);
    var xhr = new XMLHttpRequest();
    xhr.addEventListener("load", function() {
      //xhr.responseText
    });
    xhr.open("POST", "");
    xhr.send(formdata);
    xhr.addEventListener("progress", updateProgress);
    xhr.upload.addEventListener("progress", updateProgress);

    function updateProgress(event) {
      if (event.lengthComputable) {
        //进度条
      }
    }
  });
});

# 使用场景

  • 大文件
  • 网络不稳定
  • 流式上传
#js
上次更新: 2021/12/19, 18:05:42
你知道new操作符是如何实现的吗
说说对闭包的理解及应用

← 你知道new操作符是如何实现的吗 说说对闭包的理解及应用→

最近更新
01
多分支修复撞车的问题
05-01
02
如何成为架构师
01-23
03
服务器部署全过程
11-23
更多文章>
Theme by Vdoing | Copyright © 2019-2026 fangdown | 粤ICP备19079809号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式