位置: 编程技术 - 正文

Node.js开发教程之基于OnceIO框架实现文件上传和验证功能(node.js开发实战详解)

编辑:rootadmin

推荐整理分享Node.js开发教程之基于OnceIO框架实现文件上传和验证功能(node.js开发实战详解),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:NodeJs开发教程,node.js 开发工具,nodejs开发实战,nodejs开发实战,node.js开发语言,node.js 开发,node.js 开发,node.js 开发,内容如对您有帮助,希望把文章链接给更多的朋友!

OnceIO 是 OnceDoc 企业内容(网盘)的底层Web框架,它可以实现模板文件、静态文件的全缓存,运行起来完全不需要I/O操作,并且支持客户端缓存优化,GZIP压缩等(只在第一次压缩),拥有非常好的性能,为您节约服务器成本。它的模块化功能,可以让你的Web进行分布式存储,即一个扩展包里即包含前端、后端和数据库定义,只需通过添加/删除目录的方式就可实现功能删减,实现真正的模块化扩展。这里是介绍如何使用OnceIO的一系列文章。

在这一章节中,我们将为大家演示如何使用 OnceIO 实现文件上传功能。

在网页文件中构建表单

以一个只有文件上传功能的简单网页 file.html 为例:

浏览器显示效果是这样的:

点击空白长条或“浏览…”按钮可以打开文件浏览窗口选择需要上传的文件:

建立服务器接收文件逻辑

服务器文件 websvr.js 代码是这样的:

Node.js开发教程之基于OnceIO框架实现文件上传和验证功能(node.js开发实战详解)

var fs = require('fs') 和 var path = require('path') 分别导入了 Node.js 提供的用于操作文件的文件系统(fs)模块和用于处理文件路径的 path 模块。

app.file(path, callback).before(callback) 相当于 app.use(path, callback, {file: true}).before(callback) ,是一个处理上传的文件的中间件。

文件被上传后,它的大小、存放地址、名称、格式和修改时间五项信息会被放在 req.files 的 file 属性里(名称是 type 为 'file' 的 input 标签中 name 的值),它的尺寸信息会被放在 req.headers 的 content-length 属性里。

before函数

before是OnceIO与其它Web框架的主要区别之一。它可以在文件接收之前就对文件进行一些基本验证,如大小、类型等,以求获得最侍性能。return true 表示验证通并开始接收文件,否则就关闭连接,取消上传。在 before 中,req.session对象是不可用的,因为session可能存在文件或数据库redis中,取得session是一个异步过程需要时间。而before函数需要立刻对文件合法性做出判断。

在这个例子中before回调函数根据 req.headers 中的 content-length 判断上传的文件是否超出了尺寸限制(开发人员可以通过修改 if 语句中的常数改变文件上传尺寸上限,content-length 单位为 byte, * 即代表 1 MB),如果超出了,文件不会被上传,服务器返回错误信息;如果没有超出,函数返回值为 true,服务器继续执行 app.file 中的回调函数,将文件从临时地址转移到指定存储地址,文件上传到这里就完成了。

解决文件重名问题

我们目前的服务器程序是无法解决文件重名问题的。如果用户上传了重名的文件,服务器将会返回文件已经存在的错误。为了解决这个问题,我们可以在文件的主文件名和拓展名之间加入一个时间戳,进行这个处理的函数代码如下:

再把 fs.link 语句里的 fileInfo.name 替换为 timestampName(fileInfo.name):

改进后的服务器程序就能允许用户上传重名文件了,以上传 5 次名为 'cache_workflow.png' 的文件为例,服务器的文件存储地址中会出现 5 个名称都以 'cache_workflow' 开头但时间戳不同的文件:

OnceIO地址:

nodejs连接mongodb数据库实现增删改查 准备1.通过npm命令安装mongodb2.安装mongodb数据库,这里不详细介绍了,安装网址:

浅谈Node.js:Buffer模块 Javascript在客户端对于unicode编码的数据操作支持非常友好,但是对二进制数据的处理就不尽人意。Node.js为了能够处理二进制数据或非unicode编码的数据,

浅谈Node.js:理解stream Stream在node.js中是一个抽象的接口,基于EventEmitter,也是一种Buffer的高级封装,用来处理流数据。流模块便是提供各种API让我们可以很简单的使用Stream。

标签: node.js开发实战详解

本文链接地址:https://www.jiuchutong.com/biancheng/374103.html 转载请保留说明!

上一篇:Nodejs 搭建简单的Web服务器详解及实例(nodejs项目搭建)

下一篇:nodejs连接mongodb数据库实现增删改查(nodejs连接sqlserver数据库)

  • 一般纳税人认定书
  • 税控盘的进项税在哪里申报
  • 小规模公司注销时账务要如何处理
  • 出差补贴要不要发票
  • 运输费全额抵扣什么意思
  • 税款已交更正申报
  • 成本费用利润率反映什么
  • 新房购置税怎么算2022
  • 领用自产应税消费品负担的消费税计入在建工程成本吗
  • 地税人工费税率计算是怎样的?
  • 国税定额发票有效期是多长时间
  • 印花税记到哪个会计科目
  • 小规模跨年发票可以入账吗
  • 开劳务分包发票需要什么条件?
  • 计提的电费和支付电费差额如何调整
  • 境外个人所得税计算
  • 清算结业是什么意思
  • 小规模企业所得税按季度还是按年
  • 暂时性差异的转回期间如何确定
  • 呆账催讨原则是谁提出的
  • 入库单的金额填不填价税合计
  • 固定资产要办理什么手续
  • dwmexe是什么进程
  • 职工宿舍的折旧计入什么科目
  • PHP:curl_pause()的用法_cURL函数
  • PHP:curl_multi_info_read()的用法_cURL函数
  • 耕地开垦费计入土地成本吗
  • php实战
  • 计算企业应纳税所得额时,可以扣除的税种
  • 交易性金融资产的入账价值怎么算
  • 有关增值税的计算真题
  • 华为心率血压智能手表怎么样
  • js循环有哪些
  • 比斯蒂荒野上的“外星孵化场”,新墨西哥州 (© Ian Shive/Tandem Stills + Motion)
  • 在筹建期间发生的开办费
  • vue创建项目后开始写的步骤
  • vue项目开发环境
  • ieee下载论文
  • 个人往来款如何转为公司股权
  • stacking 集成
  • 最全vue项目实战
  • 经验模态分解和变分模态分解
  • 增值税减免附加税用计提吗
  • three.js gui
  • 金税盘抵免增值税怎么做账
  • 购买方已认证怎么开具红字信息表
  • 投标保证金退还时间是在什么文件的规定的
  • 汇算清缴时期间费用是负数
  • 公司开具手工发票怎么开
  • 织梦如何添加浮动广告
  • 吃饭的票如何写报销单
  • 资本公积账务处理办法
  • 会计常用分录
  • 增值税专用发票怎么开
  • 银行承兑汇票提示付款期为几天
  • 委托代销受托方会计分录
  • 无形资产账面价值和账面余额的区别
  • 转出未交增值税和未交增值税区别
  • 软件开发销售属于什么行业
  • 刻章费用怎么说
  • 公司基本账户有银行卡吗
  • 待摊费用年底能够有余额么
  • 咨询服务费计入哪里
  • 账簿设制的一般程序
  • WFXSVC.EXE - WFXSVC是什么进程
  • win10 右下角
  • win8的系统
  • win10怎么禁用device/credential guard
  • 启用win8 metro启动界面
  • 铁嘴啥意思
  • js提交表单,如果为空出现红色文字
  • [置顶]星陨计划
  • python安装pip.whl
  • javascript entries
  • python中如何获取列表中位数
  • JavaScript事件 "事件对象"的注意要点
  • python os.walk遍历目录
  • javascript怎么学好
  • 电子税务局怎么添加开票员
  • 阜阳市税务局地址
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设