Согласно документации express 4.x , мы должны иметь возможность переименовать файл, прежде чем он будет представлен пользователю в браузере, следующим образом: res.download ( path, requiredName)
В моем коде у меня есть это, чтобы попытаться увидеть, что произошло:
res.download(fpath, "hello.jpg");
И когда я пытаюсь загрузить файл в Chrome, я получаю «хэшированное» имя файла, поскольку я сохраняю его в файловой системе, чтобы избежать столкновений с тем же именем, посмотрите на изображения:
Но в Microsoft Excel (вариант без хрома) я получаю имя файла:
Что мне делать заставить chrome принять предполагаемое имя файла вместо сохранения имени в пути к файлу?
router.get("/downloadfile/", ensureAuthenticated, async (req, res) => {
try {
let fileId = req.query.id;
let fileInfo = await axios.get(
`http://localhost:5000/api/files/getfile/${fileId}/`
);
let fpath =
__dirname +
"/../public/ficheiros/" +
fileInfo.data.userAt +
"/" +
fileInfo.data.name;
res.download(fpath, "hello.jpg");
} catch (error) {
res.jsonp(error.response.data);
}
});
РЕДАКТИРОВАТЬ: Вот как я называю загрузку, на внешней стороне:
if (f.mimetype == "image/png" || f.mimetype == "image/jpeg") {
var ficheiro = $('<img src="' + f.path + '" width="80%"/>');
} else var ficheiro = $("<p>" + f.originalname + "</p>");
var download = $(
'<div><a href="/posts/downloadfile/?path=' +
f.path +
"&id=" +
f._id +
'">Download</a></div>'
);