Node.js 接口文件流下载:将流写入文件并弹出下载 - 详细教程
{"title":"Node.js 接口文件流下载:将流写入文件并弹出下载 - 详细教程","description":"使用 Node.js 和 Express 框架,将接口获取的文件流写入文件并设置响应头,实现浏览器弹出下载功能。详细教程包含代码示例和说明。","keywords":"nodejs, 文件流, 下载, express, axios, fs, createWriteStream, Content-Disposition, 响应头, 文件下载, 教程","content":""使用 Node.js 和 Express 框架,你可以轻松地将接口获取的文件流写入文件并弹出下载。以下是实现该功能的步骤和代码示例。\n\n步骤:\n\n1. 发送请求获取文件流:使用 axios 库发送请求,并通过 responseType: 'stream' 指定响应类型为流。\n2. 创建可写流:使用 fs 模块的 createWriteStream 方法创建一个可写流,将文件流写入到文件中。\n3. 设置响应头:设置 Content-Disposition 响应头,指定文件名和下载方式。\n4. 将文件流管道到响应中:将文件流管道到响应中,浏览器会自动下载文件。\n\n代码示例:\n\njavascript\nconst fs = require('fs');\nconst express = require('express');\nconst axios = require('axios');\n\nconst app = express();\n\napp.get('/download', async (req, res) => {\n try {\n // 发送请求获取文件流\n const response = await axios({\n url: 'http://example.com/your-api-endpoint',\n method: 'GET',\n responseType: 'stream'\n });\n\n // 设置响应头,指定文件名和下载方式\n res.setHeader('Content-Disposition', 'attachment; filename=\"filename.extension\"');\n\n // 创建可写流,将文件流写入到文件中\n const fileStream = fs.createWriteStream('path/to/save/file.extension');\n response.data.pipe(fileStream);\n\n fileStream.on('finish', () => {\n // 下载完成后,删除临时文件\n fs.unlinkSync('path/to/save/file.extension');\n });\n\n // 响应结束时,关闭文件流\n res.on('finish', () => {\n fileStream.close();\n });\n\n // 将文件流作为响应发送给浏览器下载\n response.data.pipe(res);\n } catch (error) {\n console.error(error);\n res.status(500).send('Internal Server Error');\n }\n});\n\napp.listen(3000, () => {\n console.log('Server is running on port 3000');\n});\n\n\n代码解释:\n\n* 使用 axios 发送 GET 请求获取文件流。\n* 创建一个可写流,并将文件流写入到文件中。\n* 设置 Content-Disposition 响应头,指定文件名和下载方式。\n* 将文件流管道到响应中,浏览器会自动下载文件。\n* 在下载完成后,删除临时文件。\n\n注意:\n\n* 确保你已经安装了 axios 和 fs 模块。\n* 将 http://example.com/your-api-endpoint 替换为实际的 API 端点。\n* 将 filename.extension 和 path/to/save/file.extension 替换为你的文件名和保存路径。\n\n总结:\n\n通过以上步骤和代码示例,你可以轻松地使用 Node.js 将接口获取的文件流写入文件并弹出下载。\n\n相关链接:\n\n* Node.js 文件系统模块文档\n* axios 文档\n* Express 框架文档\n\n希望这篇文章能够帮助你!\n\n"}
原文地址: https://www.cveoy.top/t/topic/pwIo 著作权归作者所有。请勿转载和采集!