基于JavaScript實現(xiàn)大文件上傳后端代碼實例
這里只寫后端的代碼,基本的思想就是,前端將文件分片,然后每次訪問上傳接口的時候,向后端傳入?yún)?shù):當(dāng)前為第幾塊文件,和分片總數(shù)
下面直接貼代碼吧,一些難懂的我大部分都加上注釋了:
上傳文件實體類:
看得出來,實體類中已經(jīng)有很多我們需要的功能了,還有實用的屬性。如MD5秒傳的信息。

首先是文件數(shù)據(jù)接收邏輯,負(fù)責(zé)接收控件上傳的文件塊數(shù)據(jù),然后寫到服務(wù)器的文件中??丶呀?jīng)提供了塊的索引,大小,MD5和長度信息,我們可以根據(jù)需要來靈活進(jìn)行處理,也可以將文件塊的數(shù)據(jù)保存到分布式存儲系統(tǒng)中。

文件初始化部分

第一步:獲取RandomAccessFile,隨機(jī)訪問文件類的對象
第二步:調(diào)用RandomAccessFile的getChannel()方法,打開文件通道 FileChannel,這塊邏輯可以優(yōu)化,如果以后有分布式存儲需求,可以改為分布式存儲,減輕單臺服務(wù)器的壓力。

第三步:獲取當(dāng)前是第幾個分塊,計算文件的最后偏移量
第四步:獲取當(dāng)前文件分塊的字節(jié)數(shù)組,用于獲取文件字節(jié)長度
第五步:使用文件通道FileChannel類的 map()方法創(chuàng)建直接字節(jié)緩沖器MappedByteBuffer
第六步:將分塊的字節(jié)數(shù)組放入到當(dāng)前位置的緩沖區(qū)內(nèi)mappedByteBuffer.put(byte[] b);
第七步:釋放緩沖區(qū)
第八步:檢查文件是否全部完成上傳

文件夾掃描類

存儲路徑生成類

好了,到此就全部結(jié)束了,如果有疑問或批評,歡迎評論和私信,我們一起成長一起學(xué)習(xí)。
最后放一張實現(xiàn)的效果圖

后端代碼邏輯大部分是相同的,目前能夠支持MySQL,Oracle,SQL。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
js正則表達(dá)式中test,exec,match方法的區(qū)別說明
本篇文章主要是對js正則表達(dá)式中test,exec,match方法的區(qū)別進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01
帶你領(lǐng)略O(shè)bject.assign()方法的操作方式
這篇文章主要介紹了帶你領(lǐng)略O(shè)bject.assign()方法的操作方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
JS實現(xiàn)網(wǎng)頁上隨滾動條滾動的層效果代碼
這篇文章主要介紹了JS實現(xiàn)網(wǎng)頁上隨滾動條滾動的層效果代碼,涉及JavaScript頁面元素屬性的獲取、運(yùn)算及設(shè)置等操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-11-11
動態(tài)加載iframe時get請求傳遞中文參數(shù)亂碼解決方法
這篇文章主要介紹了動態(tài)加載iframe時get請求傳遞中文參數(shù)亂碼解決方法,需要的朋友可以參考下2014-05-05
一個簡單但常用的javascript表格樣式_鼠標(biāo)劃過行變色 簡潔實現(xiàn)
經(jīng)常性的會需要使用表格顯示一些東西,當(dāng)表格比較大的時候一眼望去腦袋可能會有些暈,經(jīng)常性的因為沒看準(zhǔn)行而出現(xiàn)誤操作,一般解決辦法是交替行變行或者鼠標(biāo)劃過行變色2008-09-09

