确定最后一个文件块

蝙蝠侠

我正在尝试通过其余文件设置文件上传,以处理大文件。下面的函数负责分块,但是我需要能够识别最后一个分块,因为我的rest调用更改/finishUpload()为提交保存。

现在,我只能弄清楚Blob为空的时间,但是我不知道如何确定Blob为空之前的最后一次迭代。

这是我在下面使用的脚本来解析我的文件。

export default function parseFile(file, options) {
  var opts       = typeof options === 'undefined' ? {} : options;
  var fileSize   = file.size;
  var chunkSize  = typeof opts['chunk_size'] === 'undefined' ?  64 * 1024 : parseInt(opts['chunk_size']);
  var binary     = typeof opts['binary'] === 'undefined' ? false : opts['binary'] == true;
  var offset     = 0;
  var self       = this; // we need a reference to the current object
  var readBlock  = null;
  var chunkReadCallback = typeof opts['chunk_read_callback'] === 'function' ? opts['chunk_read_callback'] : function() {};
  var chunkErrorCallback = typeof opts['error_callback'] === 'function' ? opts['error_callback'] : function() {};
  var success = typeof opts['success'] === 'function' ? opts['success'] : function() {};

  var onLoadHandler = function(evt) {
    if (evt.target.result == "") {
      console.log('Chunk empty, call finish');
      success(file);
      return;
    }

    if (evt.target.error == null) {
      chunkReadCallback(evt.target.result, offset).then(function() {
        offset += evt.target.result.length;
        readBlock(offset, chunkSize, file);
      });
    } else {
      chunkErrorCallback(evt.target.error);
      return;
    }
    if (offset >= fileSize) {
      success(file);
      return;
    }
  }

  readBlock = function(_offset, _chunkSize, _file) {
    var r = new FileReader();
    var blob = _file.slice(_offset, _chunkSize + _offset);
    console.log("blob size:", blob.size, "offset:", _offset, "C+S:",_chunkSize + _offset)
    r.onload = onLoadHandler;

    if (binary) {
      r.readAsArrayBuffer(blob);
    } else {
      r.readAsText(blob);
    }
  }
  readBlock(offset, chunkSize, file);
}

码笔

重做

为什么不依靠文件大小,即检查条件_chunkSize + _offset >= fileSize

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

获取日志文件的最后一个“块”(模式)

来自分类Dev

Android解密:结果文件中缺少最后一个块(16个字节)

来自分类Dev

文件解密:IllegalBlockSizeException:解密中的最后一个块不完整

来自分类Dev

无法读取从文件读取的最后一个值的长度不确定的属性

来自分类Dev

为什么Hadoop分布式文件系统中的最后一个块的大小与其他块不同?

来自分类Dev

如果存在,则ID3块始终是AIFF文件中的最后一个块

来自分类Dev

处理HADOOP中的最后一个数据块

来自分类Dev

在gnuplot中绘制最后一个数据块

来自分类Dev

Simulink 中的 if 语句块累加最后一个真值

来自分类Dev

确定活动模板中的最后一个循环索引

来自分类Dev

确定是否使用最后一个参数

来自分类Dev

确定最后一个循环,以便不添加逗号

来自分类Dev

Xsl Fo:在最后一个正文列上放置一个块

来自分类Dev

sed:保持每个单词的最后一个块包含块模式

来自分类Dev

为什么我不能写入最后一个块的最后一个字节?

来自分类Dev

PHP-确定foreach中的最后一个键以消除最后的分隔符

来自分类Dev

计算文件数并打印最后一个文件

来自分类Dev

确定第一个和最后两个帖子

来自分类Dev

我如何确定一个视图在SwiftUI的最后一行代码之前完全呈现?

来自分类Dev

删除文件的最后一个字符

来自分类Dev

当前目录中最后一个文件的全局别名

来自分类Dev

VS Code打开最后一个文件

来自分类Dev

删除CSV文件中的最后一个空行

来自分类Dev

如何转到Visual Studio中的最后一个文件?

来自分类Dev

写入文件时如何删除最后一个逗号

来自分类Dev

Papaparse无法解析最后一个文件

来自分类Dev

找到最后一个更改文件?

来自分类Dev

删除JSON文件和PHP的最后一个逗号

来自分类Dev

CSV生成的PHP文件:最后一个值被截断

Related 相关文章

  1. 1

    获取日志文件的最后一个“块”(模式)

  2. 2

    Android解密:结果文件中缺少最后一个块(16个字节)

  3. 3

    文件解密:IllegalBlockSizeException:解密中的最后一个块不完整

  4. 4

    无法读取从文件读取的最后一个值的长度不确定的属性

  5. 5

    为什么Hadoop分布式文件系统中的最后一个块的大小与其他块不同?

  6. 6

    如果存在,则ID3块始终是AIFF文件中的最后一个块

  7. 7

    处理HADOOP中的最后一个数据块

  8. 8

    在gnuplot中绘制最后一个数据块

  9. 9

    Simulink 中的 if 语句块累加最后一个真值

  10. 10

    确定活动模板中的最后一个循环索引

  11. 11

    确定是否使用最后一个参数

  12. 12

    确定最后一个循环,以便不添加逗号

  13. 13

    Xsl Fo:在最后一个正文列上放置一个块

  14. 14

    sed:保持每个单词的最后一个块包含块模式

  15. 15

    为什么我不能写入最后一个块的最后一个字节?

  16. 16

    PHP-确定foreach中的最后一个键以消除最后的分隔符

  17. 17

    计算文件数并打印最后一个文件

  18. 18

    确定第一个和最后两个帖子

  19. 19

    我如何确定一个视图在SwiftUI的最后一行代码之前完全呈现?

  20. 20

    删除文件的最后一个字符

  21. 21

    当前目录中最后一个文件的全局别名

  22. 22

    VS Code打开最后一个文件

  23. 23

    删除CSV文件中的最后一个空行

  24. 24

    如何转到Visual Studio中的最后一个文件?

  25. 25

    写入文件时如何删除最后一个逗号

  26. 26

    Papaparse无法解析最后一个文件

  27. 27

    找到最后一个更改文件?

  28. 28

    删除JSON文件和PHP的最后一个逗号

  29. 29

    CSV生成的PHP文件:最后一个值被截断

热门标签

归档