Hapi 是一个 Node.js 的 Web 框架,它提供了许多强大的功能,如路由、插件、验证等。在实际开发中,文件上传和下载是非常常见的需求。本文将介绍如何在 Hapi 框架中实现文件上传和下载。
文件上传
文件上传是指将本地文件上传到服务器上。在 Hapi 中,我们可以使用 hapi/boom 和 hapi/inert 插件来实现文件上传。
首先,我们需要在项目中安装这两个插件:
--- ------- ---------- -----------
然后,我们可以使用以下代码来实现文件上传:
----- ---- - ---------------------- ----- ---- - ---------------------- ----- ----- - ----------------------- ----- -- - -------------- ----- ---- - ---------------- ----- ------ - ------------- ----- ------------ ----- ---- --- ----- ---- - ----- -- -- - ----- ---------------------- -------- -------------- ------- ------- ----- ---------- -------- - -------- - ------- --------- ------ ----- ------ --------------------- - -- -------- ----- --------- -- -- - ----- - ---- - - ---------------- -- ------- - ----- ------------------- ---- ----------- - ----- -------- - ------------------- ----- -------- - -------------------- ---------- ---------- ----- ---------- - ------------------------------- ----- ---------------------- ------ ---------------- -------- --------------- - --- ----- --------------- ------------------- ------- --- --------------------- -- -------
在上面的代码中,我们首先引入了必要的模块和插件。然后,在 server.route()
中定义了一个 POST 请求的路由,路径为 /upload
。在路由的 options
中,我们指定了 payload
的一些配置,如 output
、parse
和 allow
。其中,output
指定了请求体的输出类型,parse
指定了是否自动解析请求体,allow
指定了允许的请求体类型。
在路由的处理函数中,我们首先检查请求体中是否包含上传的文件,如果没有则抛出错误。然后,我们通过 file.hapi.filename
获取上传文件的文件名,并使用 fs.createWriteStream()
创建一个可写流,将上传的文件写入到指定路径中。最后,我们返回一个成功的响应。
文件下载
文件下载是指将服务器上的文件下载到本地。在 Hapi 中,我们可以使用 hapi/boom 和 hapi/inert 插件来实现文件下载。
首先,我们需要在项目中安装这两个插件:
--- ------- ---------- -----------
然后,我们可以使用以下代码来实现文件下载:
----- ---- - ---------------------- ----- ---- - ---------------------- ----- ----- - ----------------------- ----- -- - -------------- ----- ---- - ---------------- ----- ------ - ------------- ----- ------------ ----- ---- --- ----- ---- - ----- -- -- - ----- ---------------------- -------- -------------- ------- ------ ----- ----------------------- -------- ----- --------- -- -- - ----- - -------- - - --------------- ----- -------- - -------------------- ---------- ---------- -- -------------------------- - ----- ------------------- --- -------- - ------ ----------------- - --- ----- --------------- ------------------- ------- --- --------------------- -- -------
在上面的代码中,我们同样引入了必要的模块和插件。然后,在 server.route()
中定义了一个 GET 请求的路由,路径为 /download/{filename}
,其中 {filename}
是动态路由参数。在路由的处理函数中,我们首先获取路由参数中的文件名,并使用 path.join()
拼接出文件的完整路径。然后,我们使用 fs.existsSync()
检查文件是否存在,如果不存在则抛出错误。最后,我们使用 h.file()
方法将文件作为响应体直接返回。
总结
通过本文的介绍,我们可以看到在 Hapi 框架中实现文件上传和下载是非常简单的。我们只需要使用 hapi/boom 和 hapi/inert 插件,然后分别定义路由和处理函数即可。希望本文能够对大家在实际开发中有所帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65e063fb1886fbafa4d9957b