在 Web 应用的开发中,文件下载是一个常见的需求。Fastify 是一个快速、低开销、极简的 Web 框架,而且它的生态系统非常丰富。在本文中,我们将介绍在 Fastify 框架中实现文件下载的方法。
使用 reply.sendFile() 方法实现文件下载
Fastify 提供了 reply.sendFile() 方法,可以轻松地将文件发送给客户端。这个方法的使用方法非常简单,只需要在路由处理程序中调用即可,如下:
fastify.get('/download', async (request, reply) => { reply.sendFile('/path/to/file'); });
上面的例子中,我们在路由处理程序中定义了一个 GET 方法,并且将文件路径作为参数传递给了 reply.sendFile() 方法。Fastify 会自动处理文件下载的请求,并将文件发送给客户端。
如果要设置响应头,可以通过第二个参数来实现。例如,以下是通过设置 Content-Disposition 头指定文件名的方法:
fastify.get('/download', async (request, reply) => { reply.header('Content-Disposition', 'attachment;filename=file.txt'); reply.sendFile('/path/to/file'); });
上面的例子中,我们通过调用 reply.header() 方法来设置响应头中的 Content-Disposition 字段。这个字段告诉浏览器,文件应该作为附件下载,并指定下载的文件名为 file.txt。
实现带有进度条的文件下载
有时候,我们需要在文件下载中展示进度条。在 Fastify 框架中,可以通过 Node.js 自带的 fs 模块中的 createReadStream() 方法,实现带有进度条的文件下载。以下是一个示例代码:
-- -------------------- ---- ------- ----- -- - -------------- ----- ---- - ---------------- ----- -------- - --------------------------- ------------------------ ----- --------- ------ -- - ----- ------ - ------------------------------------- ----- -------- - ----------- ----- ----- - ----------------------------- ----- --------------- - ----------- ----- ---- - ---------- ------- ---------------- ----- --- -- -- --- ------------------- -------- ---------- - ----------------------------- ---------------------------- ------------ -------------------------------------- --- ------------------------------------------ ---------------------- - ---------- ------------------------------------- ----------------- ---------- ------- ----------- ---
在这个示例代码中,我们定义了一个进度条,使用 Node.js 自带的 fs 模块中的 createReadStream() 方法来创建文件的可读流,并通过 pump() 方法将进度条与可读流相连。最后,我们调用 reply.raw 对象将响应写入客户端的响应流。
总结
在 Fastify 框架中,实现文件下载功能非常简单。我们可以使用 reply.sendFile() 方法实现常规的文件下载,还可以使用 fs 模块中的 createReadStream() 方法自定义带进度条的文件下载。Fastify 框架的简洁和性能非常适合构建高效的 Web 应用程序,而文件下载功能是其中不可或缺的一部分。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/647d6ef6968c7c53b0839efd