小编给大家分享一下Node如何上传文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
首先,我们可以给出一个最初的方案,然后在代码中不断进行完善。我给出的方案一是这样一个简单逻辑:
那接下来首先我们先来完成第一步:检验图片参数
我这里写了一个方法用来检验图片参数是否完整,参数要求为一张启动图加上四个商品属性值,如果参数出现不存在的情况,则直接给客户端返回error.
接下来第二步是实现图片上传的逻辑,所以我定义了一个通用的上传文件方法:
uploadPicsAndCheckPar(req, checkParFunc, maxPic, pathDir, isNeedUid, cb)
我们先来看看参数如何理解:
req: 来源于表单请求checkParFunc: 检测上传文件参数的方法maxPic: 图片最大上传张数限制pathDir: 服务器保存上传文件文件夹名称isNeedUid: 为每张图片分配一个uidcb: 回调到路由层
首先在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可以直接引入进行使用,这些本篇就不涉及了。
以上是“Node如何上传文件”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。