1.4.1 • Published 3 years ago

@quansitech/qs-nszip v1.4.1

Weekly downloads
12
License
MIT
Repository
-
Last release
3 years ago

qs-nszip

网络存储对象流式压缩

安装

npm i @quansitech/qs-nszip

介绍

流式压缩的优点是无论要压缩多大,多少的文件,都只需占用小量的内存即可完成压缩操作。

目前支持阿里云和腾讯云的对象存储服务

  • AliOss
  • TencentCos

API

  • 添加需要压缩的存储对象

//第一个参数 需要压缩的存储对象数组

//第二个参数 生成的压缩对象

attach(object1, object2, ..., zipObject);

  • 开始压缩并上传

run() //配合attach使用

  • 监听事件

//event: 'progress', 'finish', 'abort', 'error'

//progress事件返回进度百分比 (eachZip模式由于无法预先确定需要处理的总量,因此不会触发progress事件)

//finish事件 在压缩上传完成后触发

//abort事件 调用abortZip方法后触发

//error事件 产生异常时触发,并且返回异常对象

on(event, function callback(){})

  • 轮询压缩上传

//第一个参数 可读流对象, 可以是网络流

//第二个参数 添加进压缩包的文件名

//第三个参数 需要存放网络存储的压缩文件路径

eachZip(readableStream, '文件名', '网络存储的压缩文件路径');

PS.网络流压缩上传由于无法确定需要压缩上传的数量,因此无法预测进度完成情况, 不支持 progress事件

  • 轮询压缩完成

//完成轮询压缩

eachZipFinish();

  • 中止压缩

//上传流会销毁,并清空上传碎片和文件

abortZip();

用法

  1. 获取网络存储对象,并压缩上传回网络存储
  • AliOss
const NsZip = require("@quansitech/NsZip");

//实例化,对应的参数查看阿里云OSS配置
const nszip = new NsZip("AliOss", {
   region: "",
   accessKeyId: '',
   accessKeySecret: '',
   bucket: '',
   timeout: 3600 * 1000 * 24 //建议设置成24小时,避免当压缩大文件超时
});

//设置需压缩的源文件和目标文件
//第一个参数,需要压缩的文件列表,网络存储文件地址
//第二个参数,生成的压缩包文件
nszip.attach([
    'object1',
    'object2',
    'object3',
    ...
], 'zips/2020-11-29.zip');

//监听压缩进度
nszip.on('progress', (percent) => {
    console.log(percent);
});

//监听完成状态
nszip.on('finish', () => {
    console.log('finish');
});

nszip.run() //开始压缩,异步操作。
  • TencentCos
const NsZip = require("@quansitech/NsZip");

//实例化,对应的参数查看腾讯云COS配置
const nszip = new NsZip("TencentCos", {
   SecretId: '',
   SecretKey: '',
   Bucket: '',
   Region: ''
});

//设置需压缩的源文件和目标文件
//第一个参数,需要压缩的文件列表,网络存储文件地址
//第二个参数,生成的压缩包文件
nszip.attach([
    'object1',
    'object2',
    'object3',
    ...
], 'zips/2020-11-29.zip');

//监听压缩进度
nszip.on('progress', (percent) => {
    console.log(percent);
});

//监听完成状态
nszip.on('finish', () => {
    console.log('finish');
});

nszip.run() //开始压缩,异步操作。
  1. 一边下载网络资源,一边压缩上传至网络存储
//监听最终完成事件
nszip.on('finish', () => {
    console.log('finish');
});

let index=0;
for(let i=0; i< 100; i++){
    fetch("http://demo.test/5ec98e24e5326.jpg").then(res => {
        const resIndex = ++index;
        
        if(res.status == 200){
            nszip.eachZip(res.body, `${i}.jpg`, 'testFillZip.zip');
            //监听流结束事件
            res.body.on('close', () => {
                //最后一个流处理结束后触发压缩完成处理
                if(res.body.eachZipindex == 100){
                    nszip.eachZipFinish();
                }
            });
        }
    });
}

自定义分片大小

实例化时设置option.miniChunkSize

const nszip = new NsZip("TencentCos", {
   SecretId: '',
   SecretKey: '',
   Bucket: '',
   Region: '',
   miniChunkSize: 100 * 1024*1024 //100Mb
});

打包压缩处理后图片

attach方法的第一个参数的数组元素支持对象,对象格式为 { object: $key, process: $process}

process 的格式根据不同平台的格式而定

//腾讯云cos
nszip.attach([
    { object: 'smaple.jpg', process: 'watermark/1/image/aHR0cDovL2V4YW1wbGVzLTEyNTEwMDAwMDQucGljc2gubXlxY2xvdWQuY29tL3NodWl5aW4uanBn/gravity/southeast'},
    'object2',
    'object3',
    ...
], 'zips/2020-11-29.zip');


//aliyun oss
nszip.attach([
    { object: 'smaple.jpg', process: 'image/resize,m_fixed,w_100,h_100'},
    'object2',
    'object3',
    ...
], 'zips/2020-11-29.zip');
1.4.1

3 years ago

1.4.0

3 years ago

1.3.1

3 years ago

1.3.0

3 years ago

1.2.4

3 years ago

1.2.3

3 years ago

1.2.2

3 years ago

1.2.1

3 years ago

1.2.0

3 years ago

1.1.0

3 years ago

1.0.0

3 years ago