Итак, я пытаюсь вернуть файлы пользователю после того, как они были загружены на сервер. Я храню загруженные файлы в каталоге приложения, в каталоге с именем uploads. Вот код, который я использую для обслуживания файлов:
if (req.url.split("/")[1] == "uploads") {
console.log("requesting file " + virtualToPhysical(req.url));
var file = fs.readFile(virtualToPhysical(req.url), function (err, data) {
if (err) {
throw err;
} else {
res.writeHead(200, { 'Content-Type': mime.lookup(req.url) });
res.end(data, 'binary');
}
});
}
virtualToPhysical просто добавляет путь к каталогу в файловой системе к URL-адресу запроса. Если req.url — «/uploads/image1.jpg», virtualToPhysical выдаст «/path/to/application/uploads/image1.jpg». Вызов mime.lookup() исходит из прилагаемой библиотеки, которая выводит правильный тип MIME для файла.
Этот код работает без ошибок. Заголовки ответов выглядят нормально, но тело каждый раз возвращается пустым, независимо от типа или размера файла. Я пробовал другой метод, используя util.pump(), но он дает тот же результат.
*EDIT:* Я искал все вокруг, и это буквально единственный метод, который, как говорят люди, используется для передачи файла через узел. Я в недоумении, в чем может быть моя проблема. Кто-то предложил не использовать флаг «двоичный» при вызове res.end(), но тот же эффект возникает несмотря ни на что.