Prefacio
Al descargar archivos con HTTP, solo necesita establecer el encabezado de respuesta relevante en el servidor y usar binarios para transmitir datos de archivos, y el cliente (navegador) recibirá datos de archivo basados en el encabezado de respuesta. En Node.js, después de configurar el encabezado de respuesta, lea la secuencia de archivos y luego transfiera la transmisión a la Response del objeto de respuesta utilizando el método “.pipe()” , puede implementar un servidor de descarga de archivo simple.
1. Introducción de descarga de archivos
HTTP implementa la interacción de estado en función del encabezado de solicitud y el encabezado de respuesta. Después de obtener el estado de respuesta correcto del servidor, el cliente primero analizará el encabezado de respuesta y recibirá y mostrará datos (cuerpo de respuesta) en función del encabezado de respuesta. Para la descarga de archivos, el proceso de implementación es el siguiente:
1. El cliente inicia una solicitud de recurso de archivo
2. El servidor busca el archivo correspondiente y establece encabezados de respuesta, como " Content-Type " y " Content-Disposition " para representar el tipo de "MIME" y la descripción del archivo del archivo respectivamente.
3. El cliente analiza y recibe datos de archivo basados en el encabezado de respuesta devuelto por el servidor.
Encabezado de respuesta que debe establecerse
Al configurar los encabezados de respuesta de descarga de archivos, además de los encabezados de respuesta HTTP comúnmente utilizados, es más importante establecer los siguientes dos encabezados de respuesta:
Tipo de contenido: aplicación/Octet-StreamContent-Disposition: adjunto; FileName = myFileName.ext
En la configuración anterior, " Content-Type: application/octet-stream " le dice al navegador que este es un archivo binario, y " Content-Disposition " le dice al navegador que este es un archivo adjunto que debe descargarse y le dice al navegador el nombre del archivo predeterminado. Si no se agrega el encabezado de respuesta " Content-Disposition ", el navegador puede descargar o mostrar el contenido del archivo, y el procesamiento de diferentes navegadores varía.
2. Implementación del servidor de descarga de archivos node.js
A continuación, implementamos un servidor de descarga de archivos simple basado en Express Framework, que incluye principalmente dos funciones: navegar por archivos del servidor y descargar archivos .
2.1 Agregar una ruta
Después de crear la aplicación Express, agregue las siguientes dos rutas:
router.get ('/files', function (req, res, next) {// show del archivo del servidor}); router.get ('/file/: filename', function (req, res, next) {// implementar descarga de archivos});Las dos rutas agregadas anteriormente se utilizan para: mostrar archivos del servidor e implementar descargas de archivos .
2.2 Mostrar archivos del servidor
Para realizar la visualización de archivos del servidor, debe leer el directorio de archivos a través del módulo " fs " y realizar comprobaciones de archivos/directorio , etc. También debe usar el módulo " ruta " para procesar la ruta del archivo. Primero, se introducen estos dos módulos:
const fs = require ('fs'); const ruta = requerir ('ruta');El código de implementación para mostrar el archivo del servidor es el siguiente:
router.get ('/files', function (req, res, next) {// show del archivo de servidor // directorio de archivos var filePath = path.Join (__ dirname, './'); fs.ReadDir (filePath, function (err, resultados) {if (err) throL; if (results.length> 0) {var files = []; results.foreach (Function (archivo) if (fs.statsync (path.join (filePath, archivo)). ISFILE ()) {files.push (archivo); En el código anterior, después de leer el directorio, la lista de archivos descargables se muestra a través del archivo de vista " files.ejs ". El código es el siguiente:
< %> </a> </li> <%})%> </ul> <%} else {%> <p> No hay archivos descargables ... </p> <%}%> </bod> </html>2.3 Implementar la descarga de archivos
Al descargar un archivo, primero puede leer el archivo en un " Buffer " y luego enviar los datos del archivo a través de los métodos " res.send()” o " res.end()” , o puede enviar los datos del archivo en función de la secuencia (" Stream "). Al usar " Stream " para implementar la descarga de archivos, puede usar el método " fs.createReadStream()” para crear una secuencia legible, y la Response del objeto de respuesta es una secuencia de escritura. De esta manera, solo necesita transferir la secuencia de archivos al flujo de respuesta de Response a través del método ”.pipe()” .
El código de implementación de descarga de archivos es el siguiente:
Router.get ('/file/: filename', function (req, res, next) {// implementa archivos descargar var filename = req.params.filename; var filepath = path.join (__ dirname, filename); var stats = fs.statsync (filepath); If (estatess.isfile ()) {res.set ({'' content -type ': 'Application/Octet-Stream', 'Disposición de contenido': 'Adjunto;Resumir
Lo anterior es todo el contenido de usar Node.js para lograr descargas de archivos HTTP. Espero que sea útil para todos aprender Node.js.