Tengo una función que recorre una matriz que contiene rutas a archivos, luego elimino cada uno de ellos. Los archivos se cargan con Multer en una carpeta "assets/temp/". Aquí está mi método de eliminación usando fs:
exports.unlinkFiles = (filesPathsArr) => { try { filesPathsArr.forEach((filePath) => { if (fs.existsSync(filePath)) { fs.unlinkSync(filePath) console.log('File deleted : ', filePath) } }) } catch (error) { throw error } }Mi entrada por ejemplo:
['assets\temp\pexelsphoto19886811645117462309.jpg', 'assets\temp\relaxtriptest1645118333937.mp3']Mi salida:
File Deleted : assets\temp\pexelsphoto19886811645117462309.jpg File Deleted : assets\temp\relaxtriptest1645118333937.mp3Pero en mi carpeta temp :
+ Y si trato de abrir el archivo, dice 'Habilitar para leer...'
+ Cuando reinicio el servidor, el archivo simplemente desaparece
¿Es solo un problema local con mi máquina, tal vez el problema desaparezca en producción? ¿O tal vez es solo un pequeño detalle del que no debería preocuparme? O es otra cosa ?
¡Resolví el problema!
Después de cargar el archivo con Multer, lo subo a AWS S3.
Pero el problema es que si hay un error con el código de AWS, lanzo una excepción y luego elimino los archivos cargados del directorio temporal. Pero al hacer esto, no dejé que la función de AWS terminara y, por lo tanto, el flujo de lectura aún estaba abierto.
La solución entonces fue myReadStreamCreated.destroy() al final de la función y también en la captura del bloque try catch, si se lanza una excepción, para permitir que fs.unlink pueda eliminar el archivo correctamente.
Gracias a Ruby-novato