169 lines
6.6 KiB
JavaScript
169 lines
6.6 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
const formidable = require('formidable');
|
|
const unzipper = require('unzipper');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
// Defina o caminho do arquivo .vsf
|
|
const vsfFilePath = path.join('/var/www/html/agrobase/downloads/version_files.vsf');
|
|
|
|
var routes = function () {
|
|
|
|
router.get('/getVsfData', (req, res) => {
|
|
fs.readFile(vsfFilePath, 'utf8', (err, data) => {
|
|
if (err) {
|
|
console.error("Erro ao ler o arquivo .vsf:", err);
|
|
return res.status(500).json({ message: "Erro ao ler o arquivo .vsf" });
|
|
}
|
|
|
|
// Tenta converter o conteúdo em JSON
|
|
try {
|
|
const jsonData = JSON.parse(data);
|
|
res.json(jsonData);
|
|
} catch (parseError) {
|
|
console.error("Erro ao analisar o arquivo .vsf:", parseError);
|
|
res.status(500).json({ message: "Erro ao analisar o conteúdo do arquivo .vsf" });
|
|
}
|
|
});
|
|
});
|
|
|
|
router.post('/uploadTrainFiles', (req, res) => {
|
|
let form = new formidable.IncomingForm();
|
|
form.maxFileSize = 600 * 1024 * 1024; // Limite de tamanho do arquivo
|
|
form.parse(req, async function (err, fields, files) {
|
|
if (err) {
|
|
console.error("Erro ao processar o arquivo:", err);
|
|
return res.status(500).send("Erro no processamento");
|
|
}
|
|
|
|
const nomeOperacao = fields.operacaoId;
|
|
const arquivoZipPath = files['imagens.zip'].path;
|
|
const dirDestino = '/var/www/html/agrobase/trainfiles/';
|
|
|
|
try {
|
|
// Certifique-se de que o diretório de destino existe
|
|
if (!fs.existsSync(dirDestino)) {
|
|
fs.mkdirSync(dirDestino, { recursive: true });
|
|
}
|
|
|
|
// Caminho completo do diretório para esta operação específica
|
|
const dirOperacao = path.join(dirDestino, nomeOperacao);
|
|
|
|
// Certifique-se de que o diretório da operação existe
|
|
if (!fs.existsSync(dirOperacao)) {
|
|
fs.mkdirSync(dirOperacao, { recursive: true });
|
|
}
|
|
|
|
// Abrir o arquivo zip e extrair as imagens com as subpastas
|
|
fs.createReadStream(arquivoZipPath)
|
|
.pipe(unzipper.Parse())
|
|
.on('entry', async function (entry) {
|
|
const fileName = entry.path;
|
|
const type = entry.type; // 'Directory' ou 'File'
|
|
|
|
if (type === 'File' && fileName.endsWith('.jpg')) {
|
|
// Caminho de destino da imagem extraída (mantém a subpasta, se houver)
|
|
const caminhoImagem = path.join(dirOperacao, fileName);
|
|
const dirImagem = path.dirname(caminhoImagem);
|
|
|
|
// Certifique-se de que a subpasta da imagem existe
|
|
if (!fs.existsSync(dirImagem)) {
|
|
fs.mkdirSync(dirImagem, { recursive: true });
|
|
}
|
|
|
|
// Salvar a imagem no diretório correto
|
|
entry.pipe(fs.createWriteStream(caminhoImagem));
|
|
} else {
|
|
entry.autodrain(); // Ignorar diretórios ou arquivos não suportados
|
|
}
|
|
})
|
|
.on('close', () => {
|
|
console.log("Arquivo descompactado com sucesso e imagens sincronizadas.");
|
|
res.send(true);
|
|
});
|
|
} catch (error) {
|
|
console.error("Erro ao descompactar o arquivo:", error);
|
|
res.status(500).send("Erro no processamento do arquivo ZIP");
|
|
}
|
|
});
|
|
});
|
|
|
|
router.post('/uploadVersionFiles', (req, res) => {
|
|
let form = new formidable.IncomingForm();
|
|
form.maxFileSize = 600 * 1024 * 1024; // Limite de tamanho do arquivo
|
|
|
|
form.parse(req, async function (err, fields, files) {
|
|
if (err) {
|
|
console.error("Erro ao processar o arquivo:", err);
|
|
return res.status(500).send("Erro no processamento");
|
|
}
|
|
|
|
const file = files.file;
|
|
const fileName = fields.fileName; // Nome do arquivo formatado
|
|
const destino = `/var/www/html/agrobase/downloads/${fileName}`;
|
|
|
|
fs.copyFile(file.path, destino, (err) => {
|
|
if (err) {
|
|
console.error("Erro ao salvar o arquivo:", err);
|
|
return res.status(500).send("Erro ao salvar o arquivo");
|
|
}
|
|
res.status(200).send({ filePath: destino });
|
|
});
|
|
});
|
|
});
|
|
|
|
router.post('/deleteVersionFile', (req, res) => {
|
|
const { filePath } = req.body;
|
|
|
|
if (!filePath) {
|
|
return res.status(400).send("Caminho do arquivo não fornecido.");
|
|
}
|
|
|
|
const downloadsDir = '/var/www/html/agrobase/downloads';
|
|
const fullPath = path.join(downloadsDir, path.basename(filePath));
|
|
|
|
fs.access(fullPath, fs.constants.F_OK, (err) => {
|
|
if (err) {
|
|
console.error("Arquivo não encontrado:", err);
|
|
return res.status(404).send("Arquivo não encontrado.");
|
|
}
|
|
|
|
fs.unlink(fullPath, (err) => {
|
|
if (err) {
|
|
console.error("Erro ao excluir o arquivo:", err);
|
|
return res.status(500).send("Erro ao excluir o arquivo.");
|
|
}
|
|
|
|
res.status(200).send({ message: "Arquivo excluído com sucesso." });
|
|
});
|
|
});
|
|
});
|
|
|
|
router.post('/updateVsfFile', (req, res) => {
|
|
const jsonData = req.body.data; // Dados JSON do Angular
|
|
|
|
fs.writeFile(vsfFilePath, jsonData, 'utf8', (err) => {
|
|
if (err) {
|
|
console.error("Erro ao atualizar o arquivo .vsf:", err);
|
|
return res.status(500).send("Erro ao salvar o arquivo .vsf");
|
|
}
|
|
res.status(200).send("Arquivo .vsf atualizado com sucesso");
|
|
});
|
|
});
|
|
|
|
router.post('/login', function (req, res) {
|
|
let usuario = req.body.usuario;
|
|
let senha = req.body.senha;
|
|
const sqlQuery = `SELECT
|
|
nome
|
|
FROM usuarios
|
|
WHERE usuario = '${usuario}' AND senha = '${senha}';`;
|
|
ExecuteQueryAgro(sqlQuery, req, res);
|
|
});
|
|
|
|
return router;
|
|
}
|
|
|
|
module.exports = routes;
|