在Web开发中,文件传输和下载是常见的需求。使用Node.js,我们可以轻松地实现文件的上传和下载。本文将详细介绍如何使用Node.js创建一个简单的文件下载服务器,以及如何使用JavaScript客户端代码来接收文件输出流。
一、准备工作
在开始之前,请确保你的环境中已安装Node.js。你可以从Node.js官网下载并安装。
二、创建文件下载服务器
1. 创建项目目录
首先,创建一个项目目录,并在其中创建一个名为server.js的文件。
mkdir file-download-server
cd file-download-server
touch server.js
2. 安装依赖
使用npm安装express和fs模块。
npm init -y
npm install express fs
3. 编写服务器代码
编辑server.js文件,添加以下代码:
const express = require('express');
const fs = require('fs');
const path = require('path');
const app = express();
const PORT = 3000;
app.get('/download/:filename', (req, res) => {
const fileName = req.params.filename;
const filePath = path.join(__dirname, 'uploads', fileName);
fs.stat(filePath, (err, stats) => {
if (err) {
return res.status(404).send('File not found');
}
res.setHeader('Content-Type', 'application/octet-stream');
res.setHeader('Content-Disposition', `attachment; filename=${fileName}`);
res.setHeader('Content-Length', stats.size);
const fileStream = fs.createReadStream(filePath);
fileStream.pipe(res);
});
});
app.use(express.static('uploads'));
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
4. 上传文件
在项目目录下创建一个名为uploads的文件夹,并将需要下载的文件放入其中。
三、客户端代码
使用JavaScript编写一个简单的客户端代码来下载文件。
const axios = require('axios');
const downloadFile = async (url, filename) => {
try {
const response = await axios({
url,
method: 'GET',
responseType: 'stream',
});
const writer = fs.createWriteStream(filename);
response.data.pipe(writer);
return new Promise((resolve, reject) => {
writer.on('finish', resolve);
writer.on('error', reject);
});
} catch (error) {
console.error('Error downloading file:', error);
}
};
const url = 'http://localhost:3000/download/your-file-name.ext';
const filename = 'downloaded-file.ext';
downloadFile(url, filename).then(() => {
console.log('File downloaded successfully!');
});
5. 运行服务器和客户端代码
运行服务器:
node server.js
运行客户端:
node your-client-script.js
此时,你应该能够下载到指定的文件。
四、总结
通过本文的介绍,你学会了如何使用Node.js创建一个简单的文件下载服务器,以及如何使用JavaScript客户端代码来接收文件输出流。希望这些知识能帮助你更好地理解和实现文件传输与下载的需求。
