Fastify 框架下文件下载的实现方法

阅读时长 4 分钟读完

前言

在使用 Fastify 开发 Web 应用的过程中,常常有需要让用户下载文件的需求。例如,某个网站需要提供一个下载链接,让用户下载某个文件(如 PDF、Excel 表格等)。本文将介绍如何在 Fastify 中实现文件下载的功能。

实现方法

Fastify 提供了 reply.download() 方法来实现文件下载的功能。该方法将文件作为响应体直接传输给客户端,可以处理大型文件和高并发请求。

基本用法

使用 reply.download() 方法时,只需要将文件的完整路径作为参数传递即可。Fastify 会自动将文件流写入响应体,返回给客户端。示例如下:

-- -------------------- ---- -------
----- ------- - ---------------------

------------------------ --------- ------ -- -
  ----- -------- - --------------------
  -------------------------
---

-------------------- ----- -------- -- -
  -- ----- ----- ----
  ------------------- --------- -- -------------
---

使用上述代码,当用户访问 /download 路径时,Fastify 会读取 file.pdf 文件的内容,并将文件流自动写入响应体,返回给客户端。

添加文件名

默认情况下,reply.download() 方法会使用文件路径中的最后一个部分作为文件名,并将其自动添加到响应头中。你可以使用 filename 选项来指定一个不同的文件名,这在下载文件时非常有用。示例如下:

-- -------------------- ---- -------
----- ------- - ---------------------

------------------------ --------- ------ -- -
  ----- -------- - --------------------
  ------------------------ - --------- -------------- ---
---

-------------------- ----- -------- -- -
  -- ----- ----- ----
  ------------------- --------- -- -------------
---

使用上述代码,当用户访问 /download 路径时,Fastify 不仅会使用新的文件名(即 new-file.pdf),而且还将其添加到响应头中,返回给客户端。

自定义响应头

有时我们需要在响应头中自定义一些信息,例如设置 Content-TypeContent-Disposition 等属性。你可以使用 headers 选项来添加自定义响应头,示例如下:

-- -------------------- ---- -------
----- ------- - ---------------------

------------------------ --------- ------ -- -
  ----- -------- - --------------------
  ----- ------- - -
    --------------- ------------------
    ---------------------- ------------ ------------------------
  --
  ------------------------ - ------- ---
---

-------------------- ----- -------- -- -
  -- ----- ----- ----
  ------------------- --------- -- -------------
---

注意,在上面的示例中,我们使用了 Content-Disposition: attachment,这表示浏览器应该将文件视为附件,并提示用户保存该文件。

总结

在本文中,我们介绍了如何在 Fastify 框架下实现文件下载的功能。我们介绍了 reply.download() 方法的用法,包括如何添加文件名和自定义响应头。希望这篇文章对你有所帮助!

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ded442f6b2d6eab39f5f40

纠错
反馈