Перейти к содержанию

Загрузка файлов и раздача статических файлов

Начало урока

Загрузка файлов и раздача статических файлов

Дайте пользователям отправлять файлы на сервер и отдавайте файлы обратно, не перегружая память

Главная идея: Реальные приложения передают не только текст. Пользователи загружают аватарки, PDF и таблицы; ваш сервер отдаёт картинки, стили и файлы для скачивания. Чтобы делать это правильно, вместе работают три инструмента: express.static для раздачи ресурсов, multer для приёма multipart-загрузок и потоки (streams) для передачи больших файлов частями, а не целиком.
К концу урока вы сможете:
  • раздавать папку с ресурсами через express.static,
  • объяснить, что такое multipart/form-data и почему express.json() не может это прочитать,
  • принимать одиночные и множественные загрузки через multer (хранение на диске и в памяти),
  • отправлять файлы обратно через res.sendFile, res.download и поток.

1. Раздача статики через express.static

Статический файл — это файл, который сервер отдаёт без изменений: картинка, CSS, шрифт, PDF для скачивания. Писать отдельный маршрут для каждого из них не нужно. В Express есть встроенное middleware express.static, которое автоматически сопоставляет папку на диске с URL-адресами.

const express = require('express');
const path = require('path');
const app = express();

// Serve every file inside ./public at the site root
app.use(express.static(path.join(__dirname, 'public')));

app.listen(3000);

Теперь файл public/logo.png доступен по адресу http://localhost:3000/logo.png без вашего собственного маршрута. Express также сам ставит правильный Content-Type, поддерживает заголовки кэширования и отвечает на HTTP range-запросы.

Часто ресурсы удобно вынести под префикс URL, чтобы они не пересекались с маршрутами API. Передайте путь монтирования первым аргументом:

// Mount the same folder under a URL prefix
app.use('/static', express.static('public'));

// public/logo.png  ->  http://localhost:3000/static/logo.png
// public/css/app.css -> http://localhost:3000/static/css/app.css
О безопасности: открывайте только те папки, которые должны быть публичными. Никогда не указывайте express.static на корень проекта — иначе вы раздадите свой исходный код и node_modules.

Продолжите этот урок на YourAIZone

В полном уроке — объяснение целиком, разобранные примеры, частые ошибки, тесты с мгновенной проверкой и ИИ-репетитор. Начните сразу как гость или создайте аккаунт, чтобы сохранять прогресс.

В полном уроке

  • Объяснение целиком
  • Разобранные примеры
  • Частые ошибки и как их избежать
  • Тестовые вопросы: 15
  • ИИ-репетитор, который отвечает на вопросы по теме
  • Отслеживание прогресса для ученика, родителей и учителя