Node上传文件(1)

说到上传下载功能可能大多数人都不会陌生,平时我们接触具有很多类似功能的软件,那么一个基本的上传功能需要有着什么样的处理逻辑呢?上传功能当然不可能只是单纯的上传,我们还是需要对用户传过来的图片做逻辑处理,符合要求的图片才允许上传。接下来我们来讲讲上传功能需要什么样的逻辑呢?

首先,我们可以给出一个最初的方案,然后在代码中不断进行完善。我给出的方案一是这样一个简单逻辑:

那接下来首先我们先来完成第一步:检验图片参数

我这里写了一个方法用来检验图片参数是否完整,参数要求为一张启动图加上四个商品属性值,如果参数出现不存在的情况,则直接给客户端返回error.

接下来第二步是实现图片上传的逻辑,所以我定义了一个通用的上传文件方法:

uploadPicsAndCheckPar(req, checkParFunc, maxPic, pathDir, isNeedUid, cb)

我们先来看看参数如何理解:

req: 来源于表单请求
checkParFunc: 检测上传文件参数的方法
maxPic: 图片最大上传张数限制
pathDir: 服务器保存上传文件文件夹名称
isNeedUid: 为每张图片分配一个uid
cb: 回调到路由层

首先在config.js中配置上传文件主目录:

CONFIG.PICSMAINPATH = '/mnt/test';

接下来生成multiparty对象,并配置上传目标路径:

var form = new multiparty.Form({uploadDir: (mainPath + '/picTemp/')});

然后执行图片上传操作:

form.parse(req,function (error,fields,files) 

到这里上传图片就结束了么?当然没有!别忘了刚才我们说过的对图片数量,大小等做限制。首先我们先解析参数格式:

检测上传图片数量是否大于我们设置的maxPic,如果超过数量,则删除上传的图片返回error。检测图片大小是否超过4M,如果超过4M则删除图片返回error

我们可以看下删除图片的逻辑,其实就是循环表单删除图片:

接下来我们还得判断每张图片的名称是否只有一个,一张图片如果出现两个名称则删除图片返回error

当然了,我们上传文件既然准备封装成公共方法,当然得适配非图片文件的情况,我这里针对视频进行了处理:

如果视频大小符合要求,检验参数是否符合接口要求,符合接口要求则重命名视频名称。那我们来看看重命名方法如何实现:

首先,我们需要构造路径,我这里以当前年月日结合uid为路径,遍历检查路径是否存在,不存在则创建文件夹

最后更新图片路径为真实路径

到这里验证图片参数全部通过,上传图片成功。给路由层返回参数列表。在路由层进行数据库层逻辑处理。

到这里一个完整的上传功能我们就实现完成,接下来我们来测试下上传接口是否可以正常运转

可以看到参数如果不完整,直接给客户端返回对应的错误信息。

如果按照刚才我们设定的接口要求传参,就可以看到我们图片上传成功。接下来我们可以看下我们定义的上传文件夹是否有图片成功上传。

可以看到图片成功上传,路径就是以当前年月日作为文件夹。我们可以快速的查看我们所上传的图片。当然,如果需要上传的资源很多,把所有资源都上传到服务器会给服务器带来一定的负荷,所以其实我们可以采用将图片直接上传到COS中。COS使用其实很便捷,官方有SDK可以直接引入进行使用,这些本篇就不涉及了。下一篇将介绍如何使用SDK将图片直接上传到COS中。

原文发布于微信公众号 - 程序猿周先森(zhanyue_org)

原文发表时间:2019-06-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券