Java web中實現文件上傳下載的三種解決方案(推薦)


這里只寫后端的代碼,基本的思想就是,前端將文件分片,然后每次訪問上傳接口的時候,向后端傳入參數:當前為第幾塊文件,和分片總數

下面直接貼代碼吧,一些難懂的我大部分都加上注釋了:

上傳文件實體類:

看得出來,實體類中已經有很多我們需要的功能了,還有實用的屬性。如MD5秒傳的信息。

 

首先是文件數據接收邏輯,負責接收控件上傳的文件塊數據,然后寫到服務器的文件中。控件已經提供了塊的索引,大小,MD5和長度信息,我們可以根據需要來靈活進行處理,也可以將文件塊的數據保存到分布式存儲系統中。

 

文件初始化部分

 

第一步:獲取RandomAccessFile,隨機訪問文件類的對象

第二步:調用RandomAccessFile的getChannel()方法,打開文件通道 FileChannel,這塊邏輯可以優化,如果以后有分布式存儲需求,可以改為分布式存儲,減輕單台服務器的壓力。

第三步:獲取當前是第幾個分塊,計算文件的最后偏移量

第四步:獲取當前文件分塊的字節數組,用於獲取文件字節長度

第五步:使用文件通道FileChannel類的 map()方法創建直接字節緩沖器  MappedByteBuffer

第六步:將分塊的字節數組放入到當前位置的緩沖區內  mappedByteBuffer.put(byte[] b);

第七步:釋放緩沖區

第八步:檢查文件是否全部完成上傳

文件夾掃描類

 

存儲路徑生成類

好了,到此就全部結束了,如果有疑問或批評,歡迎評論和私信,我們一起成長一起學習。

最后放一張實現的效果圖

后端代碼邏輯大部分是相同的,目前能夠支持MySQL,Oracle,SQL。在使用前需要配置一下數據庫,可以參考我寫的這篇文章:http://blog.ncmem.com/wordpress/2019/08/07/java超大文件上傳與下載/  
歡迎入群一起討論“374992201”


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM