master
Hai Q. Le 1 year ago
parent 7cfc4dba25
commit 7bd4b58a0d
  1. 61
      src/api/controllers/v1/path.controller.js

@ -2,8 +2,10 @@
// import httpStatus from 'http-status';
import fs from 'fs';
import archiver from 'archiver';
import { exec } from 'child_process';
import multer from 'multer';
import path from 'path';
import { cloneDeep } from 'lodash';
import { handler as ErrorHandel } from '../../middlewares/errors';
// import ApiException from '../../../common/utils/APIException';
import {
@ -12,7 +14,6 @@ import {
storage as storageConfig
} from '../../../config/vars';
import uploadAdapter from '../../../common/services/adapters/upload-adapter';
import { cloneDeep, forEach } from 'lodash';
function deleteFolderRecursive(folderPath) {
if (fs.existsSync(folderPath)) {
@ -152,41 +153,53 @@ exports.delete = (req, res, next) => {
exports.download = async (req, res, next) => {
try {
const user = req.user;
const namefile = `${user.name}-${Date.now()}.zip`;
const namefile = `${user.name.replace(/\s/g, '')}-${Date.now()}.zip`;
const dir = `${storageConfig.uri}/download/${user.id}/${namefile}`;
const folder = `${storageConfig.uri}/download/${user.id}`;
multer({ dest: `${folder}` });
await deleteFolderRecursive(folder);
const output = fs.createWriteStream(dir);
const archive = archiver('zip', {
zlib: { level: 9 } // Sets the compression level.
});
let command = ` zip -r ${dir} `;
// const output = fs.createWriteStream(dir);
// const archive = archiver('zip', {
// zlib: { level: 9 } // Sets the compression level.
// });
archive.pipe(output);
// archive.pipe(output);
if (req.body.data) {
req.body.data.forEach((e) => {
const path = e.path.replace(cdnConfig.uri, storageConfig.uri).replace(/ /g, '\\ ');
// const path = e.path.replace(cdnConfig.uri, storageConfig.uri);
console.log('path', path);
// const download = path.split("/");
// download.splice( download.indexOf(`${user.id}`), 0, "download");
// const final_path = download.join("/");
if (e.isFolder) {
archive.directory(path, e.name);
} else {
archive.file(path, { name: e.name });
}
const path1 = e.path.replace(cdnConfig.uri, storageConfig.uri).replace(/ /g, '\\ ');
command += `${path1} `;
});
}
console.log(command);
archive.finalize();
return res.json({
code: 0,
data: {
name: namefile,
path: `${cdnConfig.uri}/download/${user.id}/${namefile}`,
exec(command, (error, stdout, stderr) => {
if (error) {
console.error(`Command execution error: ${error.message}`);
return res.status(400).json({
code: 400,
message: 'error'
});
}
if (stderr) {
console.error(`Command stderr: ${stderr}`);
return res.status(400).json({
code: 400,
message: 'error'
});
}
console.log(`Command output: ${stdout}`);
return res.json({
code: 0,
data: {
name: namefile,
path: `${cdnConfig.uri}/download/${user.id}/${namefile}`,
}
});
});
} catch (ex) {
return ErrorHandel(ex, req, res, next);

Loading…
Cancel
Save