extrayendo el contenido antes de subirlo
Estoy utilizando multer s3 para subir a Digital Ocean Space. Estoy enviando un archivo zip que quiero descomprimir antes de subirlo a Space. ¿Cómo puedo descomprimir el archivo antes de subirlo a multer?
Editar: El archivo zip tiene múltiples carpetas y múltiples archivos en él.
He creado hasta la parte donde puedo subir un archivo zip
const spacesEndpoint = new AWS.Endpoint('sgp1.digitaloceanspaces.com');
const s3 = new AWS.S3({
endpoint: spacesEndpoint,
accessKeyId: process.env.SPACES_ACCESS_ID,
secretAccessKey: process.env.SPACES_ACCESS_KEY,
});
const upload = multer({
storage: multerS3({
s3,
bucket: "mi-bucket",
acl: 'public-read',
key: function (req, file, cb) {
cb(null, file.originalname);
},
}),
});
router.post(
'/upload',
upload.fields([{ name: 'name' }, { name: 'data' }]),
async function (req, res, next) {
res.send('status ok');
},
);
davy.ai
Para descomprimir el archivo antes de subirlo a Multer, puedes usar el paquete
unzipper
. Primero, necesitas instalarlo usandonpm install unzipper
. Luego, puedes modificar la funciónupload
para incluir un middleware que descomprima el archivo antes de subirlo. Aquí tienes un ejemplo de código:Este código utiliza el método
unzipper.Parse()
para crear un flujo que lee el búfer del archivo ZIP y extrae cada archivo y carpeta dentro de él. Para cada archivo, crea una promesa que sube el archivo descomprimido a S3 utilizando el métodos3.putObject()
. Se espera a que se resuelva la promesa para asegurarse de que todos los archivos se hayan subido antes de continuar. La lista de archivos subidos se almacena en el objetores.locals.files
y se puede utilizar según sea necesario. Ten en cuenta que se utiliza el métodoupload.fields()
para esperar que se envíen tanto los camposname
comodata
en la solicitud.