在现代 Web 应用程序中,文件上传和下载是必不可少的功能之一。在本文中,我们将开始探讨如何在 Fastify 中实现这些功能。如果您不熟悉 Fastify,则可以阅读快速入门指南进行学习。
文件上传
当用户需要将文件上传到我们的服务器时,我们需要在服务器接收和处理它。在 Fastify 中,可以使用 fastify-multer 插件快速轻松地实现文件上传。
安装 fastify-multer
使用 npm 包管理器安装 fastify-multer:
npm install fastify-multer --save
配置 fastify-multer
要使用 fastify-multer,可以在使用 Fastify 注册路由的地方调用 fastify-multer
函数,并将选项传递给它,如下所示:
-- -------------------- ---- ------- ----- ------- - --------------------- ----- ------ - -------------------------- --------------------------------------- -- ----- ------- --- ---- ------ ----------------------- ----- --------- ------ -- - -- ------------------------ - ----------------------------- -- --- ------------ ------- - ----- ---- - ----- ------------------------------- ----- ---------- - ----- ---------------------- ----------------------- ---
在上面的代码中,我们使用 fastify-multer 函数注册了内容解析器中间件,然后在 /upload
路由处理程序中使用 request.raw
获取上传的数据,并将其保存在磁盘上。
保存上传的文件到磁盘
使用 Node.js fs.promises
API 将文件保存到磁盘上,并返回上传的文件的元数据:
-- -------------------- ---- ------- ----- -------- --------------------- - ----- --------- - ------------ ----- -------- - ------------------ --- - ----- ----------------------------- ----------------- - ------------------- - ----- ----- - ----- ----------------------------- - ----- ------------------------------------------------- ------ ------ - --------- --------- --------------------------- -- -
在上面的代码中,我们使用 Node.js 内置的 fs.promises
API 将文件保存到指定的 uploads
目录中,并返回保存的文件的元数据。
流式读取请求数据
由于我们必须以适当的方式从请求数据中提取二进制数据,因此我们需要创建一个帮助程序函数从数据流中读取数据并返回 promise:
-- -------------------- ---- ------- -------- ------------------------- - ------ --- ----------------- ------- -- - --- ---- - --- ----------------- ------- -- - ---- -- ------ --- ------------------ ----- -- - ------------ --- ---------------- -- -- - -------------- --- --- -
上传文件示例代码
在这个例子中,当用户上传文件时,它将被保存到服务器上的硬盘中,并且将原始文件名返回给客户端:
-- -------------------- ---- ------- ----- ------- - --------------------- ----- ------ - -------------------------- ----- -- - -------------- ----- - --- ------ - - ---------------- --------------------------------------- ----------------------- ----- --------- ------ -- - -- ------------------------ - ----------------------------- -- --- ------------ ------- - ----- ---- - ----- ------------------------------- ----- ---------- - ----- ---------------------- ------------ --------- --------------------- ------------- ---------------------------------------------------------------------- ---- --- --- ----- -------- ------------------------- - ------ --- ----------------- ------- -- - --- ---- - --- ----------------- ------- -- - ---- -- ------ --- ------------------ ----- -- - ------------ --- ---------------- -- -- - -------------- --- --- - ----- -------- --------------------- - ----- --------- - ------------ ----- -------- - ------------------ --- - ----- ----------------------------- ----------------- - ------------------- - ----- ----- - ----- ----------------------------- - ----- ------------------------------------------------- ------ ------ - --------- --------- --------------------------- -- - -------------------- ----- -- - -- ----- - ----------------- ---------------- - ------------------- -- ------- -- ------------------------ ---
文件下载
在 Fastify 中,处理文件下载相对来说比文件上传要容易一些。我们可以配置 Fastify 返回要下载的文件的元数据,然后让客户端使用这些元数据下载文件。
下载文件示例代码
在这个例子中,当用户请求下载文件时,文件将从服务器的硬盘中直接提供给客户端,让客户端决定如何处理该文件(即下载或在浏览器中查看)。以下是实现代码:
-- -------------------- ---- ------- ----- ------- - --------------------- ----- -- - ----------------------- ----- ---- - ---------------- ---------------------------------- ----- --------- ------ -- - ----- ------- - ------------ ----- -------- - ------------------ ------------------------- --- - ----- -------------------- - ----- ----- - -------------------------- --- -------- ------- - ----------------------------------- ------------ ---------------------------------------- --------------------------------------- ---------------- ----------------------- --- -------------------- ----- -- - -- ----- - ----------------- ---------------- - ------------------- -- ------- -- ------------------------ ---
在上面的代码中,当用户请求下载文件 http://localhost:3000/download/:filename
时,服务器将从硬盘读取文件并将它直接发送到客户端。
总结
在本文中,我们演示了如何在 Fastify 中实现文件上传和下载功能。Fastify 的插件使这两个过程变得容易,同时,Node.js 的内置 API 和第三方模块让文件操作变得简单。掌握这些技术对于任何 Web 应用程序都是有意义的。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649b9e3548841e989486293a