Parece que muchas personas se han encontrado con un tipo de problema similar, pero buscar en Google no me ha ayudado hasta ahora. Estoy tratando de entregar el archivo al usuario y solicitar automáticamente la descarga en el lado del cliente, pero todo lo que obtengo es "La imagen no se puede mostrar porque contiene errores.
Aquí está mi código del lado del cliente:
function downloadFile(passcode){ console.log(passcode); const payload = {"password" : passcode.toLowerCase()} axios.post(downloadUrl, payload, { headers : {'Content-Type' : 'application/json'} }) .then((res) => { console.log(res.data) window.open(downloadUrl + '/' + res.data) }) }Entonces, el usuario ingresa un código de acceso, hace clic en el botón de descarga y debe obtener el archivo apropiado. Se abre una nueva pestaña, pero el archivo no comienza a descargarse. Aquí está mi lado del servidor:
const getFilePath = async (req, res) => { const passcode = req.body.password try { fs.readdir(path.join(homeDir + '/uploads/' + passcode), 'utf-8',(err, files) => { files.forEach((file) => { const filename = passcode + '/' + file try { res.send(filename) res.end() } catch (error) { console.log(error); } }) }) } catch (error) { console.log(error); } } const fileDownload = async (req, res) => { const {dir: directory, file: fileName} = req.params const filePath = path.join(homeDir + '/uploads/' + directory + '/' + fileName) fs.access(filePath, fs.constants.F_OK, err => { //check that we can access the file console.log(`${filePath} ${err ? "does not exist" : "exists"}`); }); res.download(filePath) res.end() }Incluso verifico el archivo con fs.access y devuelve verdadero (imprime {filepath} existe), pero el archivo no se sirve en absoluto.
¡Cualquier tipo de ayuda es muy apreciada!
EDITAR: Decidí trabajar un poco en mi interfaz para refrescarme, volví e inmediatamente noté res.end () justo debajo del archivo de envío, que finaliza la transmisión. ¡Lo eliminé y funciona a las mil maravillas!