{"id":20144173,"url":"https://github.com/quansitech/qs-nszip","last_synced_at":"2026-06-08T17:32:00.595Z","repository":{"id":57138557,"uuid":"316984222","full_name":"quansitech/qs-nszip","owner":"quansitech","description":"网络存储流式压缩","archived":false,"fork":false,"pushed_at":"2020-12-18T08:51:12.000Z","size":93,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-02T23:44:03.130Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/quansitech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-11-29T15:41:13.000Z","updated_at":"2020-12-18T08:51:14.000Z","dependencies_parsed_at":"2022-09-03T13:42:34.603Z","dependency_job_id":null,"html_url":"https://github.com/quansitech/qs-nszip","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/quansitech/qs-nszip","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quansitech%2Fqs-nszip","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quansitech%2Fqs-nszip/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quansitech%2Fqs-nszip/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quansitech%2Fqs-nszip/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quansitech","download_url":"https://codeload.github.com/quansitech/qs-nszip/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quansitech%2Fqs-nszip/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34073740,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-13T22:09:03.946Z","updated_at":"2026-06-08T17:32:00.570Z","avatar_url":"https://github.com/quansitech.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# qs-nszip\n网络存储对象流式压缩\n\n## 安装\n```node\nnpm i @quansitech/qs-nszip\n```\n\n## 介绍\n流式压缩的优点是无论要压缩多大，多少的文件，都只需占用小量的内存即可完成压缩操作。\n\n目前支持阿里云和腾讯云的对象存储服务\n+ AliOss\n+ TencentCos\n\n## API\n+ 添加需要压缩的存储对象\n\n//第一个参数 需要压缩的存储对象数组\n\n//第二个参数 生成的压缩对象\n\nattach([object1, object2, ...], zipObject);\n\n\n+ 开始压缩并上传\n\nrun() //配合attach使用\n\n+ 监听事件\n\n//event: 'progress', 'finish', 'abort', 'error'\n\n//progress事件返回进度百分比 (eachZip模式由于无法预先确定需要处理的总量，因此不会触发progress事件)\n\n//finish事件 在压缩上传完成后触发\n\n//abort事件 调用abortZip方法后触发\n\n//error事件 产生异常时触发，并且返回异常对象\n\non(event, function callback(){})\n\n+ 轮询压缩上传\n\n//第一个参数 可读流对象, 可以是网络流\n\n//第二个参数 添加进压缩包的文件名\n\n//第三个参数 需要存放网络存储的压缩文件路径\n\neachZip(readableStream, '文件名', '网络存储的压缩文件路径');\n\n PS.网络流压缩上传由于无法确定需要压缩上传的数量，因此无法预测进度完成情况， 不支持 progress事件\n\n+ 轮询压缩完成\n\n//完成轮询压缩\n\neachZipFinish();\n\n+ 中止压缩\n\n//上传流会销毁，并清空上传碎片和文件\n\nabortZip();\n\n\n## 用法\n\n1. 获取网络存储对象，并压缩上传回网络存储\n+ AliOss\n```javascript\nconst NsZip = require(\"@quansitech/NsZip\");\n\n//实例化，对应的参数查看阿里云OSS配置\nconst nszip = new NsZip(\"AliOss\", {\n   region: \"\",\n   accessKeyId: '',\n   accessKeySecret: '',\n   bucket: '',\n   timeout: 3600 * 1000 * 24 //建议设置成24小时，避免当压缩大文件超时\n});\n\n//设置需压缩的源文件和目标文件\n//第一个参数，需要压缩的文件列表，网络存储文件地址\n//第二个参数，生成的压缩包文件\nnszip.attach([\n    'object1',\n    'object2',\n    'object3',\n    ...\n], 'zips/2020-11-29.zip');\n\n//监听压缩进度\nnszip.on('progress', (percent) =\u003e {\n    console.log(percent);\n});\n\n//监听完成状态\nnszip.on('finish', () =\u003e {\n    console.log('finish');\n});\n\nnszip.run() //开始压缩，异步操作。\n```\n\n+ TencentCos\n```javascript\nconst NsZip = require(\"@quansitech/NsZip\");\n\n//实例化，对应的参数查看腾讯云COS配置\nconst nszip = new NsZip(\"TencentCos\", {\n   SecretId: '',\n   SecretKey: '',\n   Bucket: '',\n   Region: ''\n});\n\n//设置需压缩的源文件和目标文件\n//第一个参数，需要压缩的文件列表，网络存储文件地址\n//第二个参数，生成的压缩包文件\nnszip.attach([\n    'object1',\n    'object2',\n    'object3',\n    ...\n], 'zips/2020-11-29.zip');\n\n//监听压缩进度\nnszip.on('progress', (percent) =\u003e {\n    console.log(percent);\n});\n\n//监听完成状态\nnszip.on('finish', () =\u003e {\n    console.log('finish');\n});\n\nnszip.run() //开始压缩，异步操作。\n```\n\n2. 一边下载网络资源，一边压缩上传至网络存储\n```javascript\n//监听最终完成事件\nnszip.on('finish', () =\u003e {\n    console.log('finish');\n});\n\nlet index=0;\nfor(let i=0; i\u003c 100; i++){\n    fetch(\"http://demo.test/5ec98e24e5326.jpg\").then(res =\u003e {\n        const resIndex = ++index;\n        \n        if(res.status == 200){\n            nszip.eachZip(res.body, `${i}.jpg`, 'testFillZip.zip');\n            //监听流结束事件\n            res.body.on('close', () =\u003e {\n                //最后一个流处理结束后触发压缩完成处理\n                if(res.body.eachZipindex == 100){\n                    nszip.eachZipFinish();\n                }\n            });\n        }\n    });\n}\n```\n\n\n#### 自定义分片大小\n\n实例化时设置option.miniChunkSize\n\n```javascript\nconst nszip = new NsZip(\"TencentCos\", {\n   SecretId: '',\n   SecretKey: '',\n   Bucket: '',\n   Region: '',\n   miniChunkSize: 100 * 1024*1024 //100Mb\n});\n```\n\n#### 打包压缩处理后图片\n\nattach方法的第一个参数的数组元素支持对象，对象格式为 { object: $key, process: $process}\n\nprocess 的格式根据不同平台的格式而定\n\n```javascript\n\n//腾讯云cos\nnszip.attach([\n    { object: 'smaple.jpg', process: 'watermark/1/image/aHR0cDovL2V4YW1wbGVzLTEyNTEwMDAwMDQucGljc2gubXlxY2xvdWQuY29tL3NodWl5aW4uanBn/gravity/southeast'},\n    'object2',\n    'object3',\n    ...\n], 'zips/2020-11-29.zip');\n\n\n//aliyun oss\nnszip.attach([\n    { object: 'smaple.jpg', process: 'image/resize,m_fixed,w_100,h_100'},\n    'object2',\n    'object3',\n    ...\n], 'zips/2020-11-29.zip');\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquansitech%2Fqs-nszip","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquansitech%2Fqs-nszip","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquansitech%2Fqs-nszip/lists"}