Я использую Экспресс 4.13, и я встретил некоторые проблемы, когда я пытался служить файлы:res.sendFile не работает
function doServeFile(name, fullpath, res, download) {
if (fullpath) {
if (download)
res.download(fullpath, name);
else {
res.sendFile(fullpath, {}, function (err) {
console.info(err);
});
}
}
else {
res.status(404);
}
}
function serveFile(id, res, download) {
Model.findById(id).then(file=> {
var fullPath = Config.uploadDest + "/" + file.path;
doServeFile(file.filename, fullPath, res, download)
}).catch(Util.dbErrorHandler);
}
router.get("/:id", function (req, res, next) {
serveFile(req.params.id, res);
});
router.get("/download/:id", function (req, res, next) {
serveFile(req.params.id, res, true);
});
как коды показанный после того, как я отправить запрос /1
на сервер, его будет извлекать файл с идентификатором 1
, чтобы получить путь к файлу, а затем использовать res.sendFile
для обслуживания файла клиенту.
Однако, когда я запускаю приложение, я обнаружил, что запрос будет слишком долго зависать, чтобы получить ответ. Но я могу видеть, как это журналы:
---try send file:D:/file_upload/1464578330791_user.jpg
Похоже, что файл был неправдоподобным, но res.sendFile
не завершит свою работу.
Кроме того, когда я попробовал /download/1
, файл можно скачать.
Что происходит?
'res.sendFile() поддерживается Экспресс v4.8.0 onwards' http://expressjs.com/ru/api.html#res.sendFile – dcodesmith
Переменная 'id' в вашем маршруте не определена. Вы отправляете полный код? Кроме того, 'fullpath' в' doServeFile' будет _allways_ оцениваться как true, потому что вы префикс его с 'Config.uploadDest + '/" '. – robertklep
@robertklep: Мой очерк, идентификатор не определен. И, как я уже сказал, я вижу полный путь к файлу в журнале. – hguser