美文网首页
单请求断点续传

单请求断点续传

作者: 芸芸众生ing | 来源:发表于2021-04-14 20:52 被阅读0次

前端代码

// 单请求断点续传
    async upload_onec(file) {
      const reader = new FileReader();
      reader.onload = (e) => {
        const URL = "http://127.0.0.1:3000/api/upload_onec";
        const buffer = e.currentTarget.result;
        const view = new Uint8Array(buffer);
        const md5 = MD5(view.toString());
        // let params = { md5, filename: file.name };
        fetch(URL + "?md5=" + md5)
          .then((res) => res.json())
          .then(({ data }) => {
            this.uploadFile({ name: file.name, URL, buffer, md5, loaded: data.loaded });
          });
      };
      reader.readAsArrayBuffer(file);
    },
    uploadFile({ name, URL, buffer, md5, loaded }) {
      let xhr = new XMLHttpRequest();
      xhr.onreadystatechange = () => {
        if (xhr.readyState === 4 && xhr.status === 200) {
          const res = JSON.parse(xhr.responseText);
          console.log(res);
        }
      };
      xhr.open("POST", URL + `?filename=${name}&md5=${md5}`, true);
      xhr.setRequestHeader("token", "token");
      xhr.send(buffer.slice(loaded));
    }

后端nodejs代码

const PATH = require("path");
const { existsSync, statSync, writeFileSync, appendFileSync, renameSync } = require("fs");

const post = ({ req, config, api }) =>
  new Promise((resolve, reject) => {
    const { md5, filename } = req.query;
    const filepath = PATH.join(config.cacheFilePath, md5);
    const savepath = PATH.join(config.saveFilePath, filename);
    const savefilePath = PATH.join(config.savePath, filename);
    req.on("data", (chunk) => {
      console.log(chunk);
      if (existsSync(filepath)) {
        appendFileSync(filepath, chunk);
      } else {
        writeFileSync(filepath, chunk);
      }
    });
    req.on("end", () => {
      api.ApiMkdir(config.saveFilePath);
      renameSync(filepath, savepath);
      resolve(savefilePath);
    });
    req.on("error", err => {
      console.log("上传错误");
      reject(err)
    });
  });
const get = ({ req, config }) => {
  const { md5 } = req.query;
  const filepath = PATH.join(config.cacheFilePath, md5);
  if (existsSync(filepath)) {
    return statSync(filepath).size;
  } else {
    return 0;
  }
}

module.exports = { post, get }

相关文章

  • 单请求断点续传

    前端代码 后端nodejs代码

  • AFN的二次封装单例类

    用一个单例类将一些常用的网络请求进行了封装,主要包括post请求 get请求 图片文件上传下载 视频的断点续传...

  • Android-单线程断点续传

    断点续传的原理 看上一篇Android-断点续传 下面的例子是下载的断点续传,断点续传很简单就两点:1.网络请求的...

  • java断点续传原理

    断点续传的原理 其实断点续传的原理很简单,就是在 Http 的请求上和一般的下载有所不同而已。打个比方,浏览器请求...

  • iOS开发NSURLConnection 断点续传

    比如请求的数据大小是0~1000的话断点续传的原理酒如同下面的分段解析 分块请求 Request 请求头 通过...

  • AFN断点续传机制

    AFN断点续传机制 检查服务器文件信息 检查本地文件 如果比服务器文件小,断点续传,利用HTTP请求头的Range...

  • Http请求头Range

    用于请求服务器返回指定部分内容,常用由于断点续传。 请求格式 Range: <数据格式>=<数据开始的索引位置>-...

  • xUtils3 源码解析 -- 实现断点续传

    在通过网络进行图片或者文件的下载时,为保证内存和磁盘资源的合理利用,我们一般会对此次请求进行断点续传。断点续传,顾...

  • uniapp视频分段渐进式播放-前端

    Http请求头RangeRange请求头是HTTP1.1才加入的,它为并行下载以及断点续传提供了技术支持。如下是一...

  • NSURLSession和NSURLConnection区别

    1.下载任务方式 2.请求方式的控制 3.断点续传方式 4.配置方式

网友评论

      本文标题:单请求断点续传

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