您好,登錄后才能下訂單哦!
nodejs+express-實(shí)現(xiàn)文件上傳下載管理的網(wǎng)站
項(xiàng)目Github地址:https://github.com/qcer/updo
后端:基于nodejs的express的web框架.
前端:bootstrap框架+vuejs、jquery等js庫(kù)
功能點(diǎn):
項(xiàng)目結(jié)構(gòu)總覽:
app/:典型的MVC架構(gòu),其下包含模型(models),視圖(views),控制器(controller),不過(guò)此處沒(méi)有用到models層,完全是試圖與控制器進(jìn)行數(shù)據(jù)的交互。前端頁(yè)面用jade前端模板引擎編寫(xiě),因?yàn)閖ade可以很好的支持頁(yè)面的模塊化,套用bootstrap前端框架。
config/:應(yīng)用的配置目錄,包括靜態(tài)目錄的配置,數(shù)據(jù)庫(kù)的配置等,不多說(shuō)。
freedom/:其下有兩個(gè)字子目錄(hidden/和upload/),其中hidden/目錄存放文件上傳后存放的目錄位置。
node_modules/:項(xiàng)目依賴的nodejs第三方模塊,不多說(shuō)。
public/:存放靜態(tài)文件的目錄(css文件,js文件,圖片)。
詳細(xì)功能點(diǎn)描述:
1、左側(cè)導(dǎo)航欄選中背景加深
這部分實(shí)現(xiàn)是簡(jiǎn)單粗暴,借助jQuery選擇器遍歷id為main-name下面的li標(biāo)簽當(dāng)li標(biāo)簽的子標(biāo)簽a的href屬性等于當(dāng)前頁(yè)面的href時(shí),首先去除兄弟li標(biāo)簽的active類,再添加當(dāng)前l(fā)i標(biāo)簽的class為active。
在某些情況下,也可以通過(guò)給a標(biāo)簽綁定點(diǎn)擊事件,當(dāng)發(fā)生點(diǎn)擊事件時(shí),設(shè)置li標(biāo)簽的class為active,但是此時(shí)a標(biāo)簽中帶有超鏈接,點(diǎn)擊之后,固然可以將li標(biāo)簽的class的active,但是隨即頁(yè)面發(fā)生跳轉(zhuǎn),頁(yè)面再次被刷新,效果消失。因此,通過(guò)jQuery改變頁(yè)面效果僅當(dāng)前頁(yè)面有效,一旦頁(yè)面刷新,便不再有效。
局部代碼:
2、文件列表實(shí)現(xiàn)
后臺(tái):
通過(guò)fs模塊的readdirSync同步函數(shù)讀取freedom/upload/目錄下的所有文件名,再根據(jù)文件名遍歷文件每個(gè)文件的詳細(xì)信息,此處調(diào)用fs模塊的statSync同步函數(shù)。
局部代碼:
重要的信息有累計(jì)毫秒數(shù)(valueOf()獲?。?,文件名,文件大小,文件最近改變時(shí)間(ctime)。最后在調(diào)用Array.sort()根據(jù)累計(jì)毫秒數(shù)降序排序。注意sort此時(shí)需要傳入自定義排序規(guī)則的回調(diào)函數(shù)。
前端:
前端列表以jade模板引擎和vuejs相結(jié)合,v-for指令遍歷從后端發(fā)送過(guò)來(lái)的列表數(shù)據(jù)列表,由于vuejs天生支持MVVC模式,視圖與數(shù)據(jù)模型的雙向數(shù)據(jù)綁定變得自然而然。刪除分別通過(guò)v-on指令綁定兩個(gè)點(diǎn)擊事件。
前端列表局部代碼:
vue實(shí)例代碼:
其中fileDelete()f方法通過(guò)post的方式發(fā)送數(shù)據(jù)到后端,后端響應(yīng)最新的文件列表數(shù)據(jù)回來(lái),進(jìn)而更新model層的數(shù)據(jù),由于model層數(shù)據(jù)與視圖通過(guò)view-model層聯(lián)系實(shí)現(xiàn)綁定,文件列表內(nèi)容的改變會(huì)直接反映到網(wǎng)頁(yè)上,實(shí)現(xiàn)局部更新的效果。準(zhǔn)確的講,這里雖然實(shí)現(xiàn)了雙向綁定,實(shí)際上只用到了model向view方向的單項(xiàng)綁定。
fileDownload()方法則直接一文件名作為一個(gè)參數(shù),拼接一個(gè)url,重定到該url,后端更具該url調(diào)用下載方法即可。
刪除和下載的后臺(tái)代碼:
3、文件拖拽上傳
前端:
實(shí)現(xiàn)文件拖拽的效果借助于一個(gè)前端插件dronzone.js實(shí)現(xiàn),從前端層面看來(lái),本質(zhì)上與表單上傳并無(wú)差異,都可以通過(guò)psot方法發(fā)送數(shù)據(jù)。
綁定一個(gè)上傳成功后的回調(diào)函數(shù),函數(shù)中通過(guò)post想后臺(tái)請(qǐng)求最新的文件列表數(shù)據(jù),更新vue實(shí)例的data屬性,view層通過(guò)數(shù)據(jù)綁定實(shí)現(xiàn)數(shù)據(jù)局部更新效果。
后端:
后端通過(guò)psot方法接受數(shù)據(jù),并通過(guò)multiparty第三方模塊接解析數(shù)據(jù),將前端發(fā)送過(guò)里的文件以一個(gè)隨即字符串作為文件名存放在freedom/upload/目錄下,在調(diào)用fs的renameSync方法更改為正確的文件名,最后記得調(diào)用res.end()結(jié)束傳輸連接,否則前端頁(yè)面一直處于等待狀態(tài)。
4、白板復(fù)制粘貼的功能
前端:
直接在表單中嵌入一個(gè)textarea標(biāo)簽,給按鈕綁定點(diǎn)擊事件實(shí)現(xiàn)提交,通過(guò)post方法向后端發(fā)送文本數(shù)據(jù),提交成功后通過(guò)Jquery實(shí)現(xiàn)局部異步刷新提交的內(nèi)容,顯示在頁(yè)面上。此處拋棄form默認(rèn)的提交功能,因?yàn)槟J(rèn)的提交動(dòng)作不能實(shí)現(xiàn)提交回調(diào)操作,自定義帶有異步回調(diào)的submit動(dòng)作。
局部代碼:
異步回調(diào)的submit有多重實(shí)現(xiàn)方式
方式一:通過(guò)jquery.form.min.js插件實(shí)現(xiàn)
方式二:DIY實(shí)現(xiàn)
但是此處有點(diǎn)不好地方在與,js代碼與html代碼存在耦合,通過(guò)vuejs來(lái)重構(gòu)可以實(shí)現(xiàn)兩者的解耦。
提交后臺(tái)代碼:
同時(shí)為了動(dòng)態(tài)增加textarea空間的功能,增加一個(gè)按鈕,并綁定點(diǎn)擊事件,通過(guò)jQuery實(shí)現(xiàn)。
5、一鍵返回頂部功能
存css實(shí)現(xiàn)+jquery實(shí)現(xiàn),
通過(guò)Jquery改變css屬性,控制器是否顯示,鼠標(biāo)滑過(guò)時(shí)的背景顏色變化,以及點(diǎn)擊時(shí)返回頂部的動(dòng)作。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。