feat(unzipper): initial commit

This commit is contained in:
dancingCycle 2022-06-06 14:42:29 +02:00
parent ad731ebc29
commit c5c8db6149
6 changed files with 120 additions and 0 deletions

1
unzipper/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.env*

21
unzipper/README.md Normal file
View File

@ -0,0 +1,21 @@
## Overview
zip and unzip files
## Preparation
Run the following command in your favorite terminal to install dependenies.
```
npm i
```
## Development setup
Run the following command in your favorite terminal if you fancy log messages for debugging.
```
export DEBUG=$DEBUG,zip,debug
```
Run the following command in your favorite terminal to start the service in development mode.
```
npm run dev
```

View File

@ -0,0 +1,5 @@
/*
* SPDX-FileCopyrightText: 2022 Stefan Begerad <stefan@begerad.de>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/

48
unzipper/index.js Normal file
View File

@ -0,0 +1,48 @@
const debug=require('debug')('debug');
const fs = require('fs');
const pathInput='/home/begerad/git/sib/sandbox-node/request';
const fileInput='connect-top-dhid-1654514173016.zip';
debug('fileInput: '+fileInput);
const filePathInput=pathInput+'/'+fileInput;
debug('filePathInput: '+filePathInput);
const fileInputNoType=fileInput.slice(0,fileInput.length-4);
debug('fileInputNoType: '+fileInputNoType);
const pathOutput='/tmp'+'/'+fileInputNoType;
debug('pathOutput: '+pathOutput);
//create new folder on demand
let isUnzipped=false;
try {
//check if folder already exists
if (!fs.existsSync(pathOutput)) {
fs.mkdirSync(pathOutput);
debug("Directory is created.");
} else {
debug("Directory already exists.");
isUnzipped=true;
}
} catch (err) {
debug(err);
}
//double check if output path exists
if (fs.existsSync(pathOutput)) {
debug('Directory exists!');
} else {
debug('Directory not found.');
}
if(!isUnzipped){
debug('unzip');
const unzipper=require('./unzipper');
(async () => {
try {
await unzipper.unzip(filePathInput,pathOutput);
} catch (err) {
console.error(err);
}
})();
}else{
debug('unzip already done');
}
debug('done.');

22
unzipper/package.json Normal file
View File

@ -0,0 +1,22 @@
{
"private": true,
"name": "unzipper",
"version": "0.0.1",
"description": "",
"main": "index.js",
"scripts": {
"dev": "nodemon index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Stefan Begerad",
"license": "GPL-3.0",
"devDependencies": {
"nodemon": "^2.0.7"
},
"dependencies": {
"fs": "0.0.1-security",
"http": "0.0.1-security",
"request": "^2.88.2",
"unzipper": "^0.10.11"
}
}

23
unzipper/unzipper.js Normal file
View File

@ -0,0 +1,23 @@
const debug=require('debug')('unzipper');
const {Parse} = require('unzipper');
const {createWriteStream, createReadStream} = require('fs');
const unzip = (pathInput,pathOutput) => {
debug('pathInput: '+pathInput);
const stream=createReadStream(pathInput).pipe(Parse());
return new Promise((resolve, reject) => {
debug('pathOutput: '+pathOutput);
stream.on('entry', (entry) => {
let file=`${pathOutput}/${entry.path}`;
debug('file: '+file);
const writeStream=createWriteStream(file);
return entry.pipe(writeStream);
});
stream.on('finish', () => resolve());
stream.on('error', (error) => reject(error));
});
};
module.exports={
unzip
}