基于JavaScript實(shí)現(xiàn)大文件上傳后端代碼實(shí)例
這里只寫(xiě)后端的代碼,基本的思想就是,前端將文件分片,然后每次訪問(wèn)上傳接口的時(shí)候,向后端傳入?yún)?shù):當(dāng)前為第幾塊文件,和分片總數(shù)
下面直接貼代碼吧,一些難懂的我大部分都加上注釋了:
上傳文件實(shí)體類(lèi):
看得出來(lái),實(shí)體類(lèi)中已經(jīng)有很多我們需要的功能了,還有實(shí)用的屬性。如MD5秒傳的信息。
首先是文件數(shù)據(jù)接收邏輯,負(fù)責(zé)接收控件上傳的文件塊數(shù)據(jù),然后寫(xiě)到服務(wù)器的文件中??丶呀?jīng)提供了塊的索引,大小,MD5和長(zhǎng)度信息,我們可以根據(jù)需要來(lái)靈活進(jìn)行處理,也可以將文件塊的數(shù)據(jù)保存到分布式存儲(chǔ)系統(tǒng)中。
文件初始化部分
第一步:獲取RandomAccessFile,隨機(jī)訪問(wèn)文件類(lèi)的對(duì)象
第二步:調(diào)用RandomAccessFile的getChannel()方法,打開(kāi)文件通道 FileChannel,這塊邏輯可以?xún)?yōu)化,如果以后有分布式存儲(chǔ)需求,可以改為分布式存儲(chǔ),減輕單臺(tái)服務(wù)器的壓力。
第三步:獲取當(dāng)前是第幾個(gè)分塊,計(jì)算文件的最后偏移量
第四步:獲取當(dāng)前文件分塊的字節(jié)數(shù)組,用于獲取文件字節(jié)長(zhǎng)度
第五步:使用文件通道FileChannel類(lèi)的 map()方法創(chuàng)建直接字節(jié)緩沖器MappedByteBuffer
第六步:將分塊的字節(jié)數(shù)組放入到當(dāng)前位置的緩沖區(qū)內(nèi)mappedByteBuffer.put(byte[] b);
第七步:釋放緩沖區(qū)
第八步:檢查文件是否全部完成上傳
文件夾掃描類(lèi)
存儲(chǔ)路徑生成類(lèi)
好了,到此就全部結(jié)束了,如果有疑問(wèn)或批評(píng),歡迎評(píng)論和私信,我們一起成長(zhǎng)一起學(xué)習(xí)。
最后放一張實(shí)現(xiàn)的效果圖
后端代碼邏輯大部分是相同的,目前能夠支持MySQL,Oracle,SQL。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. Idea如何去除Mapper警告方法解析2. IntelliJ IDEA設(shè)置編碼格式的方法3. idea設(shè)置自動(dòng)導(dǎo)入依賴(lài)的方法步驟4. ASP基礎(chǔ)入門(mén)第八篇(ASP內(nèi)建對(duì)象Application和Session)5. 使用 kind 和 Docker 啟動(dòng)本地的 Kubernetes環(huán)境6. XML入門(mén)精解之結(jié)構(gòu)與語(yǔ)法7. IntelliJ IDEA設(shè)置默認(rèn)瀏覽器的方法8. idea重置默認(rèn)配置的方法步驟9. idea自定義快捷鍵的方法步驟10. idea設(shè)置代碼格式化的方法步驟
