Предисловие
При загрузке файлов с помощью HTTP вам нужно только установить соответствующий заголовок ответа на сервере и использовать двоичный файл для передачи файлов, а клиент (браузер) будет получать данные файла на основе заголовка ответа. В node.js, после настройки заголовка ответа, прочтите поток файла, а затем перенесите поток в Response объекта ответа “.pipe()” используя метод.
1. Загрузка файла введение
HTTP реализует взаимодействие состояния на основе заголовка запроса и заголовка ответа. После получения правильного состояния ответа сервера клиент сначала проанализирует заголовок ответа, а также получает и отображает данные (корпус ответа) на основе заголовка ответа. Для загрузки файлов процесс реализации следующим образом:
1. Клиент инициирует запрос на файловый ресурс
2. Сервер ищет соответствующий файл и устанавливает заголовки ответов, такие как « Content-Type » и « Content-Disposition », чтобы представить тип «MIME» и описание файла файла соответственно.
3. Клиент анализирует и получает данные файла на основе заголовка ответа, возвращаемого сервером.
Заголовок ответа, который должен быть установлен
При настройке заголовков ответов загрузки файла, в дополнение к обычно используемым заголовкам ответов HTTP, важнее установить следующие два заголовка ответов:
Контент-тип: приложение/октябрь-стригкондот-Диспозиция: вложение; filename = myfilename.ext
В приведенных выше параметрах « Content-Type: application/octet-stream » сообщает браузеру, что это двоичный файл, и « Content-Disposition » сообщает браузеру, что это вложение, которое необходимо загрузить и сообщает браузеру имя файла по умолчанию. Если заголовок ответа « Content-Disposition » не добавлен, браузер может загружать или отображать содержимое файла, а обработка различных браузеров варьируется.
2. Node.js File Download Реализация сервера сервера
Затем мы реализуем простой сервер загрузки файлов на основе Express Framework, который в основном включает в себя две функции: файлы сервера просмотра и загрузку файлов .
2.1 Добавление маршрута
После создания приложения Express добавьте следующие два маршрута:
router.get ('/files', function (req, res, next) {// Показать файл сервера}); router.get ('/file/: filename', function (req, res, next) {// реализация загрузки файла});Два маршрута, добавленные выше, используются для: отображать файлы сервера и реализация загрузки файлов .
2.2 отображать файлы сервера
Чтобы реализовать отображение файлов сервера, вы должны прочитать каталог файлов через модуль « fs » и выполнить проверки файлов/каталогов и т. Д. Вам также необходимо использовать модуль « Path » для обработки пути файла. Во -первых, введены эти два модуля:
const fs = require ('fs'); const path = require ('path');Код реализации для отображения файла сервера следующим образом:
router.get ('/files', function (req, res, next) {// show файл сервера // каталог файлов var filepath = path.join (__ dirname, './'); fs.readdir (filePath, funct if (fs.statsync (path.join (filepath, file)). isfile ()) {files.push (file); В приведенном выше коде, после прочтения каталога список загружаемых файлов отображается через файл View " files.ejs ". Код заключается в следующем:
<! Doctype html> <html> <head> <title> Выбор файла загрузки </title> </head> <body> <h1> Выберите файл загрузки: </h1> <%if (files.length> 0) {%> <ul> <%files.foreach (function) {%> <li> <s href = "/file/file- filech %> </a> </li> <%})%> </ul> <%} else {%> <p> Без загружаемых файлов ... </p> <%}%> </body> </html>2.3 Реализация загрузки файла
При загрузке файла вы можете сначала прочитать файл в « Buffer », а затем отправить данные файла через методы « res.send()” или « res.end()” , или вы можете отправить данные файла на основе потока (« Stream »). При использовании « Stream » для реализации загрузки файлов вы можете использовать метод « fs.createReadStream()” для создания читаемого потока, а Response объекта ответа - это поток для записи. Таким образом, вам нужно перенести поток файла в поток отклика Response с помощью метода ”.pipe()” .
Код реализации загрузки файла выглядит следующим образом:
router.get ('/file/: filename', function (req, res, next) {// реализация загрузки файла var filename = req.params.filename; var filepath = path.join (__ dirname, filename); var stats = fs.statsync (filepath); if stats.sistpal «Приложение/окте», «Содержание»: «Приложение;Суммировать
Выше всего содержимое использования node.js для достижения загрузки файлов HTTP. Я надеюсь, что всем будет полезно изучать node.js.