Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
前端之家收集整理的这篇文章主要介绍了
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_0@OnceIO 是 OnceDoc 企业内容(网盘)的底层Web框架,它可以实现模板文件、静态文件的全缓存,运行起来完全不需要I/O操作,并且支持客户端缓存优化,GZIP压缩等(只在第一次压缩),拥有非常好的性能,为您节约服务器成本。它的模块化功能,可以让你的Web进行分布式存储,即一个扩展包里即包含前端、后端和数据库定义,只需通过添加/删除目录的方式就可实现功能删减,实现真正的模块化扩展。这里是介绍如何使用OnceIO的一系列文章。
@H_
502_0@在这一章节中,我们将为大家演示如何使用 OnceIO 实现
文件上传功能。
@H_
502_0@
在网页文件中构建表单
@H_
502_0@以一个只有
文件上传功能的简单网页 file.html 为例:
<div class="jb51code">
<pre class="brush:js;">
<!DOCTYPE html>
@H_
502_0@浏览器
显示效果是这样的:

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

@H_
502_0@
建立服务器接收文件逻辑
@H_
502_0@服务器
文件 websvr.js
代码是这样的:
1048576) {
res.send({ error: 'Error: File Size Limit (1 MB) Exceeded' })
} else {
return true
}
})
@H_
502_0@var fs = require('fs') 和 var path = require('path') 分别导入了 Node.js 提供的用于操作
文件的
文件系统(fs)模块和用于处理
文件路径的 path 模块。
@H_
502_0@app.file(path,callback).before(callback) 相当于 app.use(path,callback,{file: true}).before(callback) ,是一个处理
上传的
文件的中间件。
@H_
502_0@
文件被
上传后,它的大小、存放地址、
名称、格式和
修改时间五项信息会被放在 req.files 的 file
属性里(
名称是 type 为 'file' 的 input
标签中 name 的值),它的尺寸信息会被放在 req.headers 的 content-length
属性里。
@H_
502_0@
before函数
@H_
502_0@before是OnceIO与其它Web框架的主要区别之一。它可以在
文件接收之前就对
文件进行一些基本验证,如大小、类型等,以求获得最侍
性能。return true 表示验证通并开始接收
文件,否则就
关闭连接,取消
上传。在 before 中,req.session对象是不可用的,因为session可能存在
文件或
数据库redis中,取得session是一个异步过程需要时间。而before
函数需要立刻对
文件合法性做出判断。
@H_
502_0@在这个例子中before回调
函数根据 req.headers 中的 content-length 判断
上传的
文件是否超出了尺寸限制(开发人员可以通过
修改 if 语句中的常数改变
文件上传尺寸上限,content-length 单位为 byte,1024 * 1024 即代表 1 MB),如果超出了,
文件不会被
上传,服务器返回
错误信息;如果没有超出,
函数返回值为 true,服务器继续执行 app.file 中的回调
函数,将
文件从临时地址转移到指定存储地址,
文件上传到这里就完成了。
@H_
502_0@
@H_
502_0@我们目前的服务器程序是无法
解决文件重名问题的。如果
用户上传了重名的
文件,服务器将会返回
文件已经存在的
错误。为了
解决这个问题,我们可以在
文件的主
文件名和拓展名之间加入一个时间戳,进行这个处理的
函数代码如下:
@H_
502_0@再把 fs.link 语句里的 fileInfo.name 替换为 timestampName(fileInfo.name):
@H_
502_0@改进后的服务器程序就能允许
用户上传重名
文件了,以
上传 5 次名为 'cache_workflow.png' 的
文件为例,服务器的
文件存储地址中会出现 5 个
名称都以 'cache_workflow' 开头但时间戳不同的
文件:

@H_
502_0@OnceIO地址:
示例源码:
@H_502_0@以上所述是小编给大家介绍的Node.js开发教程之基于OnceIO框架实现
文件上传和验证。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可
分享给好友!感谢
支持。