前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Node上传文件(1)

Node上传文件(1)

作者头像
创译科技
发布2019-06-19 14:16:54
7310
发布2019-06-19 14:16:54
举报
文章被收录于专栏:Node开发Node开发

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

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

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

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

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

代码语言:javascript
复制
uploadPicsAndCheckPar(req, checkParFunc, maxPic, pathDir, isNeedUid, cb)

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

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

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

代码语言:javascript
复制
CONFIG.PICSMAINPATH = '/mnt/test';

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

代码语言:javascript
复制
var form = new multiparty.Form({uploadDir: (mainPath + '/picTemp/')});

然后执行图片上传操作:

代码语言:javascript
复制
form.parse(req,function (error,fields,files) 

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

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

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

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

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

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

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

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

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

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿周先森 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档