nodejs+express实现文件上传下载管理网站


Posted in NodeJs onMarch 15, 2017

nodejs+express-实现文件上传下载管理的网站

项目Github地址:https://github.com/qcer/updo

后端:基于nodejs的express的web框架.

前端:bootstrap框架+vuejs、jquery等js库

功能点:

  1. dronzone.js实现文件拖拽上传、下载,可自定义传输容量。
  2. vuejs实现表格双向数据绑定。
  3. jquery.form.min.js表单插件,升级表单,实现表单提交回调。
  4. 纯css+jQuery实现一键返回顶部。
  5. 简单的ajax异步刷新。

项目结构总览:

app/:典型的MVC架构,其下包含模型(models),视图(views),控制器(controller),不过此处没有用到models层,完全是试图与控制器进行数据的交互。前端页面用jade前端模板引擎编写,因为jade可以很好的支持页面的模块化,套用bootstrap前端框架。

config/:应用的配置目录,包括静态目录的配置,数据库的配置等,不多说。

freedom/:其下有两个字子目录(hidden/和upload/),其中hidden/目录存放文件上传后存放的目录位置。

node_modules/:项目依赖的nodejs第三方模块,不多说。

public/:存放静态文件的目录(css文件,js文件,图片)。

nodejs+express实现文件上传下载管理网站

详细功能点描述:

1、左侧导航栏选中背景加深

这部分实现是简单粗暴,借助jQuery选择器遍历id为main-name下面的li标签当li标签的子标签a的href属性等于当前页面的href时,首先去除兄弟li标签的active类,再添加当前li标签的class为active。

在某些情况下,也可以通过给a标签绑定点击事件,当发生点击事件时,设置li标签的class为active,但是此时a标签中带有超链接,点击之后,固然可以将li标签的class的active,但是随即页面发生跳转,页面再次被刷新,效果消失。因此,通过jQuery改变页面效果仅当前页面有效,一旦页面刷新,便不再有效。

局部代码:

nodejs+express实现文件上传下载管理网站

2、文件列表实现

后台:

通过fs模块的readdirSync同步函数读取freedom/upload/目录下的所有文件名,再根据文件名遍历文件每个文件的详细信息,此处调用fs模块的statSync同步函数。

局部代码:

nodejs+express实现文件上传下载管理网站

重要的信息有累计毫秒数(valueOf()获取),文件名,文件大小,文件最近改变时间(ctime)。最后在调用Array.sort()根据累计毫秒数降序排序。注意sort此时需要传入自定义排序规则的回调函数。

nodejs+express实现文件上传下载管理网站

前端:

前端列表以jade模板引擎和vuejs相结合,v-for指令遍历从后端发送过来的列表数据列表,由于vuejs天生支持MVVC模式,视图与数据模型的双向数据绑定变得自然而然。删除分别通过v-on指令绑定两个点击事件。

前端列表局部代码:

nodejs+express实现文件上传下载管理网站

vue实例代码:

nodejs+express实现文件上传下载管理网站

其中fileDelete()f方法通过post的方式发送数据到后端,后端响应最新的文件列表数据回来,进而更新model层的数据,由于model层数据与视图通过view-model层联系实现绑定,文件列表内容的改变会直接反映到网页上,实现局部更新的效果。准确的讲,这里虽然实现了双向绑定,实际上只用到了model向view方向的单项绑定。

fileDownload()方法则直接一文件名作为一个参数,拼接一个url,重定到该url,后端更具该url调用下载方法即可。

删除和下载的后台代码:

nodejs+express实现文件上传下载管理网站

nodejs+express实现文件上传下载管理网站

3、文件拖拽上传

前端:

nodejs+express实现文件上传下载管理网站

实现文件拖拽的效果借助于一个前端插件dronzone.js实现,从前端层面看来,本质上与表单上传并无差异,都可以通过psot方法发送数据。

nodejs+express实现文件上传下载管理网站

绑定一个上传成功后的回调函数,函数中通过post想后台请求最新的文件列表数据,更新vue实例的data属性,view层通过数据绑定实现数据局部更新效果。

后端:

后端通过psot方法接受数据,并通过multiparty第三方模块接解析数据,将前端发送过里的文件以一个随即字符串作为文件名存放在freedom/upload/目录下,在调用fs的renameSync方法更改为正确的文件名,最后记得调用res.end()结束传输连接,否则前端页面一直处于等待状态。

nodejs+express实现文件上传下载管理网站

4、白板复制粘贴的功能

前端:

直接在表单中嵌入一个textarea标签,给按钮绑定点击事件实现提交,通过post方法向后端发送文本数据,提交成功后通过Jquery实现局部异步刷新提交的内容,显示在页面上。此处抛弃form默认的提交功能,因为默认的提交动作不能实现提交回调操作,自定义带有异步回调的submit动作。

局部代码:

nodejs+express实现文件上传下载管理网站

异步回调的submit有多重实现方式

方式一:通过jquery.form.min.js插件实现

nodejs+express实现文件上传下载管理网站

方式二:DIY实现

nodejs+express实现文件上传下载管理网站

但是此处有点不好地方在与,js代码与html代码存在耦合,通过vuejs来重构可以实现两者的解耦。

提交后台代码:

nodejs+express实现文件上传下载管理网站

同时为了动态增加textarea空间的功能,增加一个按钮,并绑定点击事件,通过jQuery实现。

nodejs+express实现文件上传下载管理网站

5、一键返回顶部功能

nodejs+express实现文件上传下载管理网站

nodejs+express实现文件上传下载管理网站

存css实现+jquery实现,

通过Jquery改变css属性,控制器是否显示,鼠标滑过时的背景颜色变化,以及点击时返回顶部的动作。

nodejs+express实现文件上传下载管理网站

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
Sep 26 NodeJs
Windows系统下使用Sublime搭建nodejs环境
Apr 13 NodeJs
windows下安装nodejs及框架express
Aug 07 NodeJs
Nodejs中session的简单使用及通过session实现身份验证的方法
Feb 04 NodeJs
nodejs的HTML分析利器node-jquery用法浅析
Nov 08 NodeJs
nodejs连接mongodb数据库实现增删改查
Dec 01 NodeJs
nodejs中全局变量的实例解析
Mar 07 NodeJs
nodejs前端自动化构建环境的搭建
Jul 26 NodeJs
让nodeJS支持ES6的词法----babel的安装和使用方法
Jul 31 NodeJs
nodejs操作mongodb的填删改查模块的制作及引入实例
Jan 02 NodeJs
NodeJs搭建本地服务器之使用手机访问的实例讲解
May 12 NodeJs
NodeJS http模块用法示例【创建web服务器/客户端】
Nov 05 NodeJs
nodejs搭建本地http服务器教程
Mar 13 #NodeJs
搭建简单的nodejs http服务器详解
Mar 09 #NodeJs
nodejs读写json文件的简单方法(必看)
Mar 09 #NodeJs
Nodejs 获取时间加手机标识的32位标识实现代码
Mar 07 #NodeJs
nodejs中全局变量的实例解析
Mar 07 #NodeJs
nodejs根据ip数组在百度地图中进行定位
Mar 06 #NodeJs
详解nodeJS中读写文件方法的区别
Mar 06 #NodeJs
You might like
详解PHP原生DOM对象操作XML的方法
2016/10/17 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
php菜单/评论数据递归分级算法的实现方法
2019/08/01 PHP
php统计数组不同元素的个数的实例方法
2019/09/26 PHP
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
2007/04/12 Javascript
jquery 新浪网易的评论块制作
2010/07/01 Javascript
js不能跳转到上一页面的问题解决方法
2013/03/01 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
jQuery的缓存机制浅析
2014/06/07 Javascript
nodejs和php实现图片访问实时处理
2017/01/05 NodeJs
jsonp跨域请求详解
2017/07/13 Javascript
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
Vue.js实现实例搜索应用功能详细代码
2017/08/24 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
2019/07/11 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
vue axios封装httpjs,接口公用配置拦截操作
2020/08/11 Javascript
Python Sleep休眠函数使用简单实例
2015/02/02 Python
python使用mysql数据库示例代码
2017/05/21 Python
解决python爬虫中有中文的url问题
2018/05/11 Python
python 将md5转为16字节的方法
2018/05/29 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
Pytorch中实现只导入部分模型参数的方式
2020/01/02 Python
Python多线程多进程实例对比解析
2020/03/12 Python
Python字符串split及rsplit方法原理详解
2020/06/29 Python
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
爱牙日活动总结
2014/08/29 职场文书
超市开业庆典活动策划方案
2014/09/15 职场文书
意外伤害赔偿协议书范文
2014/09/23 职场文书
2015年班级元旦晚会活动总结
2014/11/28 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
校运会班级霸气口号
2015/12/24 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python