推荐答案
在 Fastify 中处理文件上传可以通过使用 fastify-multipart 插件来实现。以下是一个简单的示例代码:
// www.javascriptcn.com code example
const fastify = require('fastify')({ logger: true });
// 注册 fastify-multipart 插件
fastify.register(require('fastify-multipart'));
// 处理文件上传的路由
fastify.post('/upload', async (request, reply) => {
const data = await request.file();
// 保存文件到指定路径
const filePath = `./uploads/${data.filename}`;
await pump(data.file, fs.createWriteStream(filePath));
reply.send({ message: '文件上传成功', filename: data.filename });
});
// 启动服务器
fastify.listen(3000, (err) => {
if (err) {
fastify.log.error(err);
process.exit(1);
}
fastify.log.info(`服务器正在监听 ${fastify.server.address().port}`);
});本题详细解读
1. 安装 fastify-multipart 插件
首先,你需要安装 fastify-multipart 插件:
npm install fastify-multipart
2. 注册插件
在 Fastify 应用中注册 fastify-multipart 插件:
fastify.register(require('fastify-multipart'));3. 处理文件上传
在路由处理函数中,你可以通过 request.file() 方法来获取上传的文件。request.file() 返回一个包含文件信息的对象,其中包括文件名、文件流等。
const data = await request.file();
4. 保存文件
你可以使用 pump 函数将文件流写入到指定的文件路径中。pump 是一个常用的流处理工具,可以确保文件流正确地写入目标文件。
const filePath = `./uploads/${data.filename}`;
await pump(data.file, fs.createWriteStream(filePath));5. 返回响应
最后,你可以返回一个响应给客户端,告知文件上传成功。
reply.send({ message: '文件上传成功', filename: data.filename });6. 启动服务器
确保服务器在指定的端口上监听请求。
fastify.listen(3000, (err) => {
if (err) {
fastify.log.error(err);
process.exit(1);
}
fastify.log.info(`服务器正在监听 ${fastify.server.address().port}`);
});通过以上步骤,你可以在 Fastify 中轻松处理文件上传。