网站首页 > 博客文章 正文
前言
文件上传一个基础服务端功能,比如:上传一张用户头像。
由于我自己 node api 使用的不多,借这个“文件上传”功能,来了解 node 服务端如何接收客户端的文件,然后存储到服务器上,完成整个功能。
文件上传
先看下流程图:
通常会有两种简单的场景:
- 客户端上传图片,服务端解析后,保存在当前服务器,回告客户端,整个流程结束。
- 可能还会有其他服务器需要这个上传文件,这时就涉及两个服务端之间的上传通讯过程。
下面按照这两个场景,分步看下实际怎么处理:
解析客户端请求
必须要提前说的是,浏览器端通常需要通过 form 表单组件来触发上传文件弹框的 激活。上传图片的 ajax 还需要添加特定的请求头:multipart/form-data 。
这里使用 formidable 这个工具模块,来解析来自客户端 request 中的上传文件,毕竟我们自己写代码解析太麻烦了。
借助 formidable ,整个请求流的解析还是很方便的。通过 form.parse 就能帮我们拿到上传的资源文件 file 对象,然后我们可以进行下步“文件落地”的操作。
通过 fs 实现文件落地
这里简单说下 fs 如何保存 file ,当然如果你比较熟悉 node 的话,可以选择性的跳过。
因为服务器的资源处理会比较重要,上例中只是简单的示例如何保存上传资源。实际操作中,需要对上传文件的后缀、大小、以及定期控制文件夹文件数量等有个更为严格的处理。
以防止服务器被攻击等情况的发生。
重写 node 请求,发送给后端
一般情况,我们完成上述两个步骤,基本文件上传的整个流程结束了。但可能 node 服务端只是个中间层,真正的资源落地需要在业务后端存储,这时就需要把上面存在中间层的资源,再次发到后端服务。
这里用到了 form-data 模块,来模拟类似浏览器 form 的提交信息。
拿到在中间层存储的文件路径,通过 fs 转成 ReadStream 并构造成一个 formData。再通过 axios 等 http 服务工具发送给后端服务。
当然整个请求的 header 和 data 需要符合后端的接收标准(下图,举个例子):
总结
上述是一个较为完整的文件上传说明,希望对此类有问题的同学能有启发作用。
关于我
一位“前端工程师”,乐于实践,并分享前端开发经验。
如果有问题或者想法,欢迎各位评论留言,愿大家共同进步。
关注【前端雨爸】,查阅更多前端技术心得。
- 上一篇: VUE前端编程:wangEditor5 定制图片上传
- 下一篇: 前端如何针对上传图片进行压缩处理
猜你喜欢
- 2024-09-17 一文带你搞懂前端登陆设计(前端登录页面模板)
- 2024-09-17 WANGEDITOR 实现CTRL+V粘贴图片并上传、WORD粘贴带图片
- 2024-09-17 前端的鸿蒙开发:照片上传之选择照片mate30 4.2
- 2024-09-17 黑客入门实践:如何绕过前端过滤上传文件
- 2024-09-17 Vue小知识:如何在前端处理上传文件
- 2024-09-17 ueditor粘贴word图片且图片文件自动上传功能
- 2024-09-17 前端上传前预览文件 image、text、json、video、audio「实践」
- 2024-09-17 WANGEDITOR如何能实现直接粘贴把图片上传到服务器中?
- 2024-09-17 前端上传文件或者上传文件夹(前端实现文件上传功能)
- 2024-09-17 前端上传图片被旋转的处理方案(万国觉醒金武将)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)