很多项目可能都会涉及到的业务是关于多文件上传的,那么需要使用到redis或者第三方库(使用redis)来实现任务队列,甚至需要控制并发量和分包(一次请求传多个文件),这样每次都会以实现功能来完成,但是不好维护,甚至很麻烦,大家可以了解一下这个包github地址

详解

目前该包自主已经支持调用者实现上传逻辑和回调,使用者只需要设置相关的参数(远程ip地址,检查接口,上传接口, 错误最大重试次数,图片上传分包大小, 检查已上传的文件分包大小,上传并发数, 是否检查校验文件),添加文件到任务队列后,就可以开始上传,内部逻辑暂时不支持使用者提供,包括任务回调。

上传逻辑

支持调用者实现:按照设置的包大小发起http请求,并执行回调,如果出错,返回(-1,this, error)参考./test中的demo

任务回调逻辑

内部:接收回调参数,如果出错,记录错误次数,并且将本次任务重新添加到任务队列队尾。如果超过最大重试次数,则结束所有任务(因使bagpipe库的原因,无法立即结束所有任务,正常情况下bagpipe会再执行一轮,因为任务被bagpipe给托管了,拿到本次任务回调的时候,其实bagpipe会直接开始下一轮的任务,有更好的优化和建议可以联系我或者评论,谢谢)

调用者: 内部回调后执行调用者传递的回调,返回的参数为err(库error), error(http error)

如果正确上传,则成功数量自增单个包文件数,全部完成则将工作状态改为false,且保持当前进度

状态维护

该包内部维护了一个任务状态,(需要注意的是该包为单实例模型,全局只有一个实例,目前是为了实现实例全局化,后期可能会支持多实例),详细请参加readme.md

依赖

"dependencies": {
"express": "^4.17.1", -- test
"mkdirp": "^0.5.1", -- test
"multer": "^1.4.2", -- test
"bagpipe": "*", -- 需要修改源码,详见readme.md
"request": "^2.88.0",
"request-promise": "^4.2.4"
}

README.MD

介绍

脱离redis, 基于内存, 批量上传文件到远程服务器,按照设置大小设置每次请求的包的大小和并发数量限制

版本历史

8ab6b2e: 这是版本V 0.2.0 该本版支持调用者实现上传逻辑和接收回调

API

初始化任务队列

Upload.init({
base_url: 'http://127.0.0.1:3008/', // 远程目标服务器地址
check_path: 'check_file', // 文件校验接口
upload_path: 'file', // 上传接口
});

添加任务

var file_arr = [ 'D:/files/a.test', 'D:/files/b.test' ];
Upload.createJob(file_arr);

执行任务

Upload.process(upload, callback);    //about upload and callback detail please Reference ./test demo

查询当前任务状态

const status = await Upload.status();
console.log(status);

TIPS

支持上传的文件可以在./lib/file_ext.json 中添加或修改

[
{
"ext": ".png",
"contentType": "image/png"
},
{
"ext": ".jpeg",
"contentType": "image/jpeg"
},
{
"ext": "jpg",
"contentType": "image/jpeg"
},
{
"ext": ".txt",
"contentType": "text/plain"
}
]

第三方库:bagpipe 需要修改源码./lib/bagpipe.js 148行为:method.apply(this, args);

node-批量上传文件的更多相关文章

  1. Linux命令之rz - 批量上传文件,简单易用(转载)

    用途说明 rz命令能够批量上传文件,当然也可上传单个文件啦.使用的协议是古老的ZMODEM协议,尽管协议古老,但毫不影响的简单易用的特性.一般情 况我们要上传文件到Linux系统,要么使用ftp(还得 ...

  2. 转 Android网络编程之使用HttpClient批量上传文件 MultipartEntityBuilder

    请尊重他人的劳动成果,转载请注明出处:Android网络编程之使用HttpClient批量上传文件 http://www.tuicool.com/articles/Y7reYb 我曾在<Andr ...

  3. 不带插件 ,自己写js,实现批量上传文件及进度显示

    今天接受项目中要完成文件批量上传文件而且还要显示上传进度,一开始觉得这个应该不是很麻烦,当我在做的时候遇到了很多问题,很头疼啊. 不过看了别人写的代码,自己也测试过,发现网上好多都存在一些问题,并不是 ...

  4. Python基于Python实现批量上传文件或目录到不同的Linux服务器

    基于Python实现批量上传文件或目录到不同的Linux服务器   by:授客 QQ:1033553122 实现功能 1 测试环境 1 使用方法 1 1. 编辑配置文件conf/rootpath_fo ...

  5. input file multiple 批量上传文件

    这几天维护系统,有一个批量上传文件功能,出现了一点小问题 我的笔记本选择要上传的文件很正常 但在测试环境上,别人的电脑上,选择上传文件之后 一开始,以为是代码问题,网上找了很多的资料,但还是没用,然后 ...

  6. 使用 sendKeys(keysToSend) 批量上传文件

    未经允许,禁止转载!!! 在selenium里面处理文件上传的时候可以使用sendKeys(keysToSend) 上传文件 例如: element.sendKeys(“C:\\test\\uploa ...

  7. TP3.2批量上传文件(图片),解决同名冲突问题

    1.html <form action="{:U('Upload/index')}" enctype="multipart/form-data" meth ...

  8. 用Azure CLI批量上传文件

    在Windows环境下,我们可以使用AzCopy批量上传文件.其效率和传输速率都是非常快的. 在Linux或MacOS环境下,可以使用Azure的CLI实现批量文件的上传. 下面的脚本可以实现此功能. ...

  9. Java Miniui实现批量上传文件demo 201906221520

    可能需要的jar包: 需要miniui(类似easyui). Test2019062201.jsp <%@ page language="java" contentType= ...

  10. 百度编辑器ueditor批量上传图片或者批量上传文件时,文件名称和内容不符合,错位问题

    百度编辑器ueditor批量上传附件时,上传后的文件和实际文件名称错误,比如实际是文件名“dongcoder.xls”,上传后可能就成了“懂客.xls”.原因就是,上传文件时是异步上传,同时进行,导致 ...

随机推荐

  1. 自学React 入门

    刚开始学习React, 读了官网和别人的一些博客,总结了一部分内容,记录一下.有错误欢迎指正... 一.自定义组件需要了解知识 1. 组件分类 React中有两种类型的组件,一种是"方法组件 ...

  2. ieTESTER浏览器使用ie6崩溃问题

    打开浏览器在选项--internet属性--连接--局域网设置--将自动检测设置的对勾勾掉就可以  重启下浏览器

  3. MongoDB 学习笔记之 分析器和explain

    MongoDB分析器: 检测MongoDB分析器是否打开: db.getProfilingLevel() 0表示没有打开 1表示打开了,并且如果查询的执行时间超过了第二个参数毫秒(ms)为单位的最大查 ...

  4. SpringBoot 整合 MyBatis-Plus 入门体验

    一.前言 本文小编将基于 SpringBoot 整合 MyBatis-Plus , MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上做增强并且不改变原本功能 ...

  5. Python入门系列【附】进阶教程

    如题,本篇将讲解Python提升之路:Python作为语法简单易学的语言,入门容易精通却很难,这是共识,那么为什么会有这样的共识?精通Python的难度在哪里? Python拥有简单.形象.直观的语法 ...

  6. Web高性能动画及渲染原理(1)CSS动画和JS动画

    目录 一. CSS动画 和 JS动画 1.1 CSS动画 1.2 JS动画 1.3 小结 二. 使用Velocity.js实现动画 示例代码托管在:http://www.github.com/dash ...

  7. netty源码解解析(4.0)-24 ByteBuf基于内存池的内存管理

    io.netty.buffer.PooledByteBuf<T>使用内存池中的一块内存作为自己的数据内存,这个块内存是PoolChunk<T>的一部分.PooledByteBu ...

  8. aiohttp的安装

    之前介绍的requests库是一个阻塞式HTTP请求库,当我们发出一个请求后,程序会一直等待服务器响应,知道得到响应后,程序才会进行下一步处理.其实,这个过程比较耗时.如果程序可以在这个等待过程中做一 ...

  9. 域渗透-msdtc实现dll劫持后门

    最近用的多  一个实用小tips 文章参考原创Shadow Force大牛  翻译文章参考三好大佬 利用MSDTC服务加载后门dll,实现自启动后门 后门思路可以查看趋势科技文章 https://bl ...

  10. PHP get_parent_class

    <?php class D { } class A extends D { } class B extends A { } function getAncestor($class){ $pare ...