|
|
|
@ -2,10 +2,8 @@ |
|
|
|
|
// 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 { |
|
|
|
@ -14,6 +12,7 @@ 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)) { |
|
|
|
@ -153,53 +152,41 @@ exports.delete = (req, res, next) => { |
|
|
|
|
exports.download = async (req, res, next) => { |
|
|
|
|
try { |
|
|
|
|
const user = req.user; |
|
|
|
|
const namefile = `${user.name.replace(/\s/g, '')}-${Date.now()}.zip`; |
|
|
|
|
const namefile = `${user.name}-${Date.now()}.zip`; |
|
|
|
|
const dir = `${storageConfig.uri}/download/${user.id}/${namefile}`; |
|
|
|
|
const folder = `${storageConfig.uri}/download/${user.id}`; |
|
|
|
|
multer({ dest: `${folder}` }); |
|
|
|
|
await deleteFolderRecursive(folder); |
|
|
|
|
let command = ` zip -r ${dir} `; |
|
|
|
|
|
|
|
|
|
// const output = fs.createWriteStream(dir);
|
|
|
|
|
// const archive = archiver('zip', {
|
|
|
|
|
// zlib: { level: 9 } // Sets the compression level.
|
|
|
|
|
// });
|
|
|
|
|
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 path1 = e.path.replace(cdnConfig.uri, storageConfig.uri).replace(/ /g, '\\ '); |
|
|
|
|
|
|
|
|
|
command += `${path1} `; |
|
|
|
|
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 }); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
console.log(command); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
exec(command, (error, stdout, stderr) => { |
|
|
|
|
if (error) { |
|
|
|
|
console.error(`Command execution error: ${error.message}`); |
|
|
|
|
return res.status(400).json({ |
|
|
|
|
code: 400, |
|
|
|
|
message: 'error' |
|
|
|
|
}); |
|
|
|
|
archive.finalize(); |
|
|
|
|
return res.json({ |
|
|
|
|
code: 0, |
|
|
|
|
data: { |
|
|
|
|
name: namefile, |
|
|
|
|
path: `${cdnConfig.uri}/download/${user.id}/${namefile}`, |
|
|
|
|
} |
|
|
|
|
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); |
|
|
|
|