Nodejs отправляет файл в ответ

Framework Expressjs имеет метод sendfile (). Как я могу это сделать, не используя целую структуру. Я использую node-native-zip для создания архива, и я хочу отправить его пользователю.

Вот пример программы, которая будет отправлять myfile.mp3 streamовой передачей с диска (т. Е. Он не читает весь файл в памяти перед отправкой файла). Сервер прослушивает порт 2000.

[Обновить] Как упоминалось в комментариях util.pump , util.pump ушел и был заменен на метод прототипа Stream, называемый pipe ; приведенный ниже код отражает это.

 var http = require('http'), fileSystem = require('fs'), path = require('path'); http.createServer(function(request, response) { var filePath = path.join(__dirname, 'myfile.mp3'); var stat = fileSystem.statSync(filePath); response.writeHead(200, { 'Content-Type': 'audio/mpeg', 'Content-Length': stat.size }); var readStream = fileSystem.createReadStream(filePath); // We replaced all the event handlers with a simple call to readStream.pipe() readStream.pipe(response); }) .listen(2000); 

Взято с http://elegantcode.com/2011/04/06/taking-baby-steps-with-node-js-pumping-data-between-streams/

Вам нужно использовать Stream для отправки файла (архива) в ответ, и вам больше нужно использовать соответствующий Content-type в заголовке ответа.

Для этого есть примерная функция:

 const fs = require('fs'); // Where fileName is name of the file and response is Node.js Reponse. responseFile = (fileName, response) => { const filePath = "/path/to/archive.rar" // or any file format // Check if file specified by the filePath exists fs.exists(filePath, function(exists){ if (exists) { // Content-type is very interesting part that guarantee that // Web browser will handle response in an appropriate manner. response.writeHead(200, { "Content-Type": "application/octet-stream", "Content-Disposition": "attachment; filename=" + fileName }); fs.createReadStream(filePath).pipe(response); } else { response.writeHead(400, {"Content-Type": "text/plain"}); response.end("ERROR File does not exist"); } }); } } 

objectiveю поля Content-Type является полное описание данных, содержащихся в теле, чтобы получающий пользовательский агент мог выбрать подходящий агент или механизм для представления данных пользователю или иным образом обрабатывать данные соответствующим образом.

«application / octet-stream» определяется как «произвольные двоичные данные» в RFC 2046, цель этого типа контента должна быть сохранена на диск – это то, что вам действительно нужно.

«filename = [имя файла]» указывает имя файла, который будет загружен.

Для получения дополнительной информации см. Эту тему stackoverflow .

  • Не удается установить узловые модули, требующие компиляции в Windows 7 x64 / VS2012
  • Есть ли способ скомпилировать исходные файлы node.js?
  • Попробуйте переустановить `node-sass` на узел 0.12?
  • Как сделать запрос HTTP POST в node.js?
  • NodeJS / express: код состояния кэша и 304
  • «session» не определен при использовании express / redis для хранилища сеансов
  • Обратный звонок в nodejs?
  • Как переопределить вложенные версии зависимостей NPM?
  • Как получить полный URL в Express?
  • NodeJs, читающий файл csv
  • Heroku NodeJS http to https ssl принудительное redirect
  • Interesting Posts

    Смешивание функций C в classе Objective-C

    Как бороться с ошибкой «данных classа uneval» от ggplot2?

    Bash в Windows 10 – Каталоги, не появляющиеся при создании в Проводнике файлов

    Facebook ‘Friends.getAppUsers’ с использованием Graph API

    Force 4K в Windows 7 (неверное максимальное разрешение, сообщаемое телевизором)

    Как получить серийный номер жесткого диска

    Каковы преимущества отложенного выполнения в LINQ?

    Графические сбои под Windows 10 с обновленными драйверами NVIDIA

    Entity Framework: «Заявление об обновлении, вставке или удалении влияет на неожиданное количество строк (0)».

    Установите элемент управления веб-браузером WPF для использования режима IE10

    Как скопировать настройки Chrome без их сброса?

    @WebServlet аннотация с Tomcat 7

    найти разницу между двумя текстовыми файлами с одним элементом на строку

    Как получить имя файла без расширения на Java?

    Где опция Text Transform для изгибающего текста в Microsoft Word?

    Давайте будем гением компьютера.