21xrx.com
2024-12-27 15:35:18 Friday
登录
文章检索 我的文章 写文章
Node.js发送文件教程
2023-07-05 03:29:59 深夜i     --     --
Node js 发送文件 教程

Node.js是一个基于事件驱动的轻量级JavaScript运行时环境,它允许在服务器端使用JavaScript进行编程,非常适合构建高效、可扩展的网络应用程序。在Node.js中发送文件是一个经常使用的操作,这篇文章将介绍如何通过Node.js来发送文件。

1. 使用HTTP服务器发送文件

最简单的方式是使用Node.js内置的HTTP服务器来发送文件,可以通过以下代码实现:


const http = require('http');

const fs = require('fs');

http.createServer((req, res) => {

 const fileName = 'example.txt';

 const filePath = './path/to/' + fileName;

 fs.readFile(filePath, (err, data) => {

  if (err) {

   res.write('Error occurred: ' + err.message);

   res.end();

  } else {

   res.write(data);

   res.end();

  }

 });

}).listen(3000, () => console.log('Server is running on port 3000'));

上面的代码中,我们首先创建了一个HTTP服务器,并指定它在端口3000上监听请求。当有请求到达时,我们读取文件并通过响应对象将其发送到客户端。

2. 使用Express框架发送文件

如果你正在使用Express框架,则可以使用其内置的`sendFile`方法来发送文件。以下代码演示了如何使用它:


const express = require('express');

const app = express();

app.get('/download', (req, res) => {

 const fileName = 'example.pdf';

 const filePath = './path/to/' + fileName;

 res.sendFile(filePath);

});

app.listen(3000, () => console.log('Server is running on port 3000'));

在上面的代码中,我们创建了一个Express应用程序,并定义了一个路由处理程序来处理`/download`请求。在处理程序中,我们使用`res.sendFile`方法发送文件到客户端。

3. 支持断点续传

当需要发送大文件或网络不稳定时,支持断点续传是非常必要的。以下代码演示了如何使用`range`头实现文件的断点续传:


const http = require('http');

const fs = require('fs');

http.createServer((req, res) => {

 const fileName = 'example.mp4';

 const filePath = './path/to/' + fileName;

 const stats = fs.statSync(filePath);

 const fileSize = stats.size;

 const range = req.headers.range;

 if (range) {

  const parts = range.replace(/bytes=/, '').split('-');

  const start = parseInt(parts[0], 10);

  const end = parts[1] ? parseInt(parts[1], 10) : fileSize - 1;

  const chunkSize = (end - start) + 1;

  const file = fs.createReadStream(filePath, end );

  const headers = {

   'Content-Range': `bytes ${start}-${end}/${fileSize}`,

   'Accept-Ranges': 'bytes',

   'Content-Length': chunkSize,

   'Content-Type': 'video/mp4',

  };

  res.writeHead(206, headers);

  file.pipe(res);

 } else {

  const headers =

   'Content-Length': fileSize;

  res.writeHead(200, headers);

  fs.createReadStream(filePath).pipe(res);

 }

}).listen(3000, () => console.log('Server is running on port 3000'));

在上面的代码中,我们首先读取文件的元数据,获取文件的大小。当收到带有`range`头的请求时,我们解析请求头中的起始和结束位置,并创建一个指定范围的文件流来发送文件的一部分。同时,我们需要设置`Content-Range`和`Content-Length`等头信息。如果请求头中没有`range`信息,则发送整个文件。

总结

通过Node.js发送文件可以使用内置HTTP服务器、Express框架或者手动读取文件发送内容。为了实现更好的用户体验和数据传输效率,我们还需要注意断点续传的支持。以上是Node.js发送文件的教程,希望能帮助您在开发中顺利完成相关操作。

  
  
下一篇: C++指针

评论区

{{item['qq_nickname']}}
()
回复
回复