node-批量上传文件
很多项目可能都会涉及到的业务是关于多文件上传的,那么需要使用到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-批量上传文件的更多相关文章
- Linux命令之rz - 批量上传文件,简单易用(转载)
		用途说明 rz命令能够批量上传文件,当然也可上传单个文件啦.使用的协议是古老的ZMODEM协议,尽管协议古老,但毫不影响的简单易用的特性.一般情 况我们要上传文件到Linux系统,要么使用ftp(还得 ... 
- 转 Android网络编程之使用HttpClient批量上传文件  MultipartEntityBuilder
		请尊重他人的劳动成果,转载请注明出处:Android网络编程之使用HttpClient批量上传文件 http://www.tuicool.com/articles/Y7reYb 我曾在<Andr ... 
- 不带插件 ,自己写js,实现批量上传文件及进度显示
		今天接受项目中要完成文件批量上传文件而且还要显示上传进度,一开始觉得这个应该不是很麻烦,当我在做的时候遇到了很多问题,很头疼啊. 不过看了别人写的代码,自己也测试过,发现网上好多都存在一些问题,并不是 ... 
- Python基于Python实现批量上传文件或目录到不同的Linux服务器
		基于Python实现批量上传文件或目录到不同的Linux服务器 by:授客 QQ:1033553122 实现功能 1 测试环境 1 使用方法 1 1. 编辑配置文件conf/rootpath_fo ... 
- input file multiple 批量上传文件
		这几天维护系统,有一个批量上传文件功能,出现了一点小问题 我的笔记本选择要上传的文件很正常 但在测试环境上,别人的电脑上,选择上传文件之后 一开始,以为是代码问题,网上找了很多的资料,但还是没用,然后 ... 
- 使用 sendKeys(keysToSend) 批量上传文件
		未经允许,禁止转载!!! 在selenium里面处理文件上传的时候可以使用sendKeys(keysToSend) 上传文件 例如: element.sendKeys(“C:\\test\\uploa ... 
- TP3.2批量上传文件(图片),解决同名冲突问题
		1.html <form action="{:U('Upload/index')}" enctype="multipart/form-data" meth ... 
- 用Azure CLI批量上传文件
		在Windows环境下,我们可以使用AzCopy批量上传文件.其效率和传输速率都是非常快的. 在Linux或MacOS环境下,可以使用Azure的CLI实现批量文件的上传. 下面的脚本可以实现此功能. ... 
- Java Miniui实现批量上传文件demo 201906221520
		可能需要的jar包: 需要miniui(类似easyui). Test2019062201.jsp <%@ page language="java" contentType= ... 
- 百度编辑器ueditor批量上传图片或者批量上传文件时,文件名称和内容不符合,错位问题
		百度编辑器ueditor批量上传附件时,上传后的文件和实际文件名称错误,比如实际是文件名“dongcoder.xls”,上传后可能就成了“懂客.xls”.原因就是,上传文件时是异步上传,同时进行,导致 ... 
随机推荐
- scrapy爬取迅雷电影天堂最新电影ed2k
			前言 几天没用scrapy爬网站了,正好最近在刷电影,就想着把自己常用的一个电影分享网站给爬取下来保存到本地mongodb中 项目开始 第一步仍然是创建scrapy项目与spider文件 切换到工作目 ... 
- quartz-scheduler定时器实现
			第一步,在pom.xml中引入quartz-scheduler. <dependency> <groupId>org.quartz-scheduler</groupId& ... 
- Tornado基础学习篇
			1.1 Tornado是什么? Tornado是使用Python编写的一个强大的.可扩展的Web服务器.它在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应 ... 
- php-fpm启动,重启,退出
			首先确保php-fpm正常安装,运行命令php-fpm -t输出查看: ##确定php-fpm配置正常 [root@iz2vcf47jzvf8dxrapolf7z php7.-Oct-::] NOTI ... 
- CSS技巧 (3)
			关于CSS技巧的一些题目 题目列表 所有答案点击题目链接 1.下面这个左边竖条图形,只使用一个标签,可以有多少种实现方式: 2.类似下面这样的条纹边框,只使用一个标签,可以有多少种实现方式 -- 从条 ... 
- word2vec预训练词向量
			NLP中的Word2Vec讲解 word2vec是Google开源的一款用于词向量计算 的工具,可以很好的度量词与词之间的相似性: word2vec建模是指用CBoW模型或Skip-gram模型来计算 ... 
- Django学习之文件上传
			就这么六步! 一.settings配置文件中配置 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'medias').replace ... 
- httprouter框架 (Gin使用的路由框架)
			之前在Gin中已经说到, Gin比Martini的效率高好多耶, 究其原因是因为使用了httprouter这个路由框架, httprouter的git地址是: httprouter源码. 今天稍微看了 ... 
- 执行Django数据迁移,报错 1091
			问题描述 今天在Pycharm 中的Terminal下,执行数据迁移操作时,第一步: Python manage.py makemigrations ,是没有任何问题,但就是在执行真正的数据迁移时,也 ... 
- VGG(2014),3x3卷积的胜利
			目录 写在前面 网络结构 multi-scale training and testing 其他有意思的点 参考 博客:blog.shinelee.me | 博客园 | CSDN 写在前面 VGG(2 ... 
