使用Node.js从URL下载TXT文件(无第三方库方案)
Node.js 无第三方库下载文件的最优实现
要实现无第三方库下载目标文件,直接用 Node.js 内置的 https 和 fs 模块即可,流式写入是最优方案——它不会把整个文件加载到内存,适合处理任意大小的文件,内存占用更低、性能更稳定。
以下是完整实现代码:
const https = require('https'); const fs = require('fs'); const path = require('path'); // 目标文件保存路径(当前脚本所在目录下的http.txt) const savePath = path.join(__dirname, 'http.txt'); const fileUrl = 'https://raw.githubusercontent.com/monosans/proxy-list/main/proxies/http.txt'; // 创建文件写入流 const fileStream = fs.createWriteStream(savePath); https.get(fileUrl, (response) => { // 检查响应状态码,仅处理成功请求 if (response.statusCode !== 200) { fileStream.close(); fs.unlinkSync(savePath); // 删除已创建的空文件 throw new Error(`请求失败,状态码:${response.statusCode}`); } // 将网络响应流直接导入文件写入流 response.pipe(fileStream); // 监听文件写入完成事件 fileStream.on('finish', () => { fileStream.close(); console.log('文件下载完成,已保存到:', savePath); }); }).on('error', (err) => { fileStream.close(); fs.unlinkSync(savePath); // 下载失败时清理无效文件 console.error('下载请求出错:', err.message); }); // 监听文件写入错误 fileStream.on('error', (err) => { fileStream.close(); fs.unlinkSync(savePath); console.error('文件写入出错:', err.message); });
关键细节说明:
- 流式处理:通过
response.pipe(fileStream)直接衔接网络流与文件流,避免一次性加载大文件到内存,尤其适合处理大体积文件。 - 错误兜底:覆盖了请求错误、响应状态异常、文件写入错误三种场景,出错时自动清理已创建的空文件,避免残留无效文件。
- 跨平台路径:用
path.join(__dirname, 'http.txt')确保文件保存到当前脚本所在目录,兼容 Windows/Linux/macOS 不同路径格式。
内容的提问来源于stack exchange,提问作者3jay1
相关产品推荐
相关产品推荐

