Hapi 是一个 Node.js 的 Web 应用框架,其提供了一个强大、具有可扩展性的插件架构,使它成为了一个优秀的选择。其中,多文件上传及文件下载功能是 Web 应用开发中常见的需求之一。本文将介绍如何在 Hapi 框架中实现多文件上传和文件下载,可供开发者参考学习。
多文件上传实现
多文件上传需要使用 hapi-payload-plugin
插件,在服务器端接收文件,并将文件保存至服务端。其中,三个关键点是:
- 设置路由接口,定义上传的接口;
- 配置
hapi-payload-plugin
插件,使其支持多文件上传; - 编写文件上传功能的处理代码。
设置路由接口
首先需要设置路由接口,接收上传的文件:
-- -------------------- ---- ------- -------------- ------- ------- ----- ---------- -------- ----- --------- -- -- - -- ------ -- ------- - -------- - ------- --------- ------ ----- ------ ----------------------- - - ---展开代码
此处我们定义了一个 /upload
的路由接口,用于接收文件上传请求。其中,我们必须设置 payload
配置项, output: 'stream'
表示将文件流上传到服务端; parse: true
表示将上传的数据转化为对象; allow: ['multipart/form-data']
即表单类型为 multipart/form-data
,支持文件上传。
配置 hapi-payload-plugin
插件
接下来需要安装并注册 hapi-payload-plugin
插件,才能使服务端支持多文件上传功能。在安装插件后,在服务启动文件中注册插件。
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ------- - ------------------------------- ----- ------ - --- ------------- ----- ----- ----- ----------- --- ----- ---- - ----- -- -- - ----- ----------------- ------- -------- -------- - --------- ----- -------- ----- - --- ----- --------------- - -------展开代码
完成以上配置后,就可以在 handler
函数中读取上传的文件,并将文件保存至服务端。
上传代码实现
-- -------------------- ---- ------- -------- ----- --------- -- -- - ----- ------- - ---------------- -- ----- ------- -- --------------- - ------ ------------ -------- --- ---- --------- ------------- - ----- ---- - ------------- -- ------- -- ---- ----- ---------- - ------------- -- ------ ----- ------------------------ ------ ----- -------- - ------ ----------------------------------------- ------- ----- ---- - ---------------------------- -------- ----- ---- - --------------------------- ------- ------ --- ----------------- ------- -- - ---------------- ------ -------------- -- -- - ----- ----------- - - ----- ------------------- ---- -- --------------------- --- ---------------- ----- -- - ------------ --- --- -展开代码
完整的多文件上传代码
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ------- - ------------------------------- ----- -- - -------------- ----- ------ - ------------------ ----- ---- - ---------------- ----- ------ - --- ------------- ----- ----- ----- ----------- --- ----- ---- - ----- -- -- - ----- ----------------- ------- -------- -------- - --------- ----- -------- ----- - --- -------------- ------- ------- ----- ---------- -------- ----- --------- -- -- - ----- ------- - ---------------- -- --------------- - ------ ------------ -------- --- ---- --------- ------------- - ----- ---- - ------------- ----- ---------- - ------------- ----- ------------------------ ----- -------- - ------ ----------------------------------------- ----- ---- - ---------------------------- ----- ---- - --------------------------- ------ --- ----------------- ------- -- - ---------------- -------------- -- -- - ----- ----------- - - ----- ------------------- ---- -- --------------------- --- ---------------- ----- -- - ------------ --- --- -- ------- - -------- - ------- --------- ------ ----- ------ ------------------------ --------- ------- - - --- ----- --------------- - ----- ----------- - ----------------------- -------展开代码
文件下载实现
文件下载需要使用 hapi
框架提供的 file()
方法。在路由配置中使用 file()
方法即可完成文件下载功能。
设置路由接口
-- -------------------- ---- ------- -------------- ------- ------ ------------------------- -------- - ----- ----- --------- -- - ------ ----------------------------------- - - ---展开代码
此处我们定义了一个 GET
接口,用于下载 ./uploads/
目录下的文件。使用 handler
配置项,通过 file()
方法设置返回文件路径。注意,这里的 {file*}
是一个通配符,在实际使用时可以根据需求修改。
完整的文件下载实现代码
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ------ - --- ------------- ----- ----- ----- ----------- --- ----- ---- - ----- -- -- - -------------- ------- ------ ------------------------- -------- - ----- ----- --------- -- - ------ ----------------------------------- - - --- ----- --------------- - -------展开代码
总结
本文介绍了如何在 Hapi 框架中实现多文件上传和文件下载功能。需要注意以下几点:
- 需要使用
hapi-payload-plugin
插件,才能支持多文件上传功能; - 使用
hapi
提供的file()
方法,将服务端文件托管,即可实现文件下载。
Hapi 框架具有可扩展性的插件架构,使得开发者可以方便地进行二次开发。希望通过本文的介绍,能对开发者掌握 Hapi 框架的相关能力和开发实践提供一些帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/654a3d607d4982a6eb4632b1