美文网首页
断点上传实践

断点上传实践

作者: 炒饭哥儿 | 来源:发表于2017-08-17 12:26 被阅读0次

第一次发文,文笔很烂,技术很渣,大佬们不喜勿喷。55555

背景

一次去面试,给自己挖了一个坑,被问到有没有做到断点上传,知不知道其中的原理,瞬间进入懵逼状态。下来后去网上查了一些资料,写了一个简单的demo。

原理

断点上传,顾名思义,一个文件可以分多次上传。核心点就是前端将文件分块传给后端,后端再进行拼接,最后完整文件上传。

html5提供了FileApi, 可以用file.slice将文件分块,不支持html5的可以用flash实现

代码

前端代码

function upload(file) {
  var cache = 0
  var thunk = 1024
  var totalSize = file.size
    
  send()
    
  function send() {
    var form = new FormData()
    form.append('file', file.slice(cache, cache + thunk))
    form.append('fileName', file.name)
    ajax(form, function(response) {
      cache = cache + thunk
      document.getElementById('uploadProgress').innerText = (cache / totalSize > 1 ? 1 : cache / totalSize) * 100 + '%'
      if (cache < totalSize) {
        send()
      }
    })
  }
}
    
function ajax(data, cb) {
  var xhr = new XMLHttpRequest()
  xhr.open('post', '/upload')
  xhr.send(data)
  xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) {
      if (xhr.status === 200) {
        cb && cb(xhr.reponse)
      }
    }
  }
}

后端代码

const file = ctx.request.body.files.file
const fileName = ctx.request.body.fields.fileName
const reader = fs.createReadStream(file.path)
reader.on('data', function(chunk) {
  // 暂停读取
  reader.pause()
  fs.appendFile(path.join(__dirname, 'upload', fileName), chunk, function(err) {
    if (err) {
      ctx.body = 'error'
    }
    // 继续读取
    reader.resume()
  })
})

reader.end(function() {
    ctx.body = 'completed'
})

总结

当然功能还存在很多缺陷,比如怎么实现多个块同时上传,手动暂停,保存已上传的状态等等,后面再慢慢完善。

By 走刀口(Chris Wong)

相关文章

  • 断点上传实践

    第一次发文,文笔很烂,技术很渣,大佬们不喜勿喷。55555 背景 一次去面试,给自己挖了一个坑,被问到有没有做到断...

  • AFNetworking

    上传 单图片上传 多文件上传 下载 AFNetworking 断点下载

  • 断点上传

    一、断点上传辨义 在 Http 协议之下的 文件下载有“断点续传”功能,从服务器到客户端的文件下载可行,而对Htt...

  • iOS将文件切片储存并上传仿断点续传机制

    iOS将文件切片储存并上传仿断点续传机制 iOS将文件切片储存并上传仿断点续传机制

  • 实战:1分钟搞懂OkHttp断点上传

    1、前言 经常会有同学问:文件的断点上传如何实现? 断点上传/下载,这是在客户端经常遇到的场景,当我们需要上传或下...

  • Android开发实战:5分钟带你搞懂OkHttp断点上传

    经常会有同学问:文件的断点上传如何实现? 断点上传/下载,这是在客户端经常遇到的场景,当我们需要上传或下载一个大文...

  • 断点续传

    断点续传就是从文件上次中断的地方开始重新下载或上传数据,而不是从文件开头。(本文的断点续传仅涉及下载,上传不在讨...

  • iOS开发!知识点!汇总

    一.断点续传相关 1.iOS模仿断点机制上传文件实现方法 2.iOS多任务断点续传之"框架"封装 二.有关硬件支持...

  • 使用Aspera上传数据到SRA

    在SRA上传数据,较大的文件,直接http上传容易断点,一般会使用Aspera connect进行上传。以wind...

  • 文件上传下载技术

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

网友评论

      本文标题:断点上传实践

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