日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java上传大文件_Java超大文件上传解决办法

發(fā)布時(shí)間:2024/9/27 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java上传大文件_Java超大文件上传解决办法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這里只寫后端的代碼,基本的思想就是,前端將文件分片,然后每次訪問上傳接口的時(shí)候,向后端傳入?yún)?shù):當(dāng)前為第幾塊文件,和分片總數(shù)

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

上傳文件實(shí)體類:

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

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

文件初始化部分

第一步:獲取RandomAccessFile,隨機(jī)訪問文件類的對(duì)象

第二步:調(diào)用RandomAccessFile的getChannel()方法,打開文件通道 FileChannel,這塊邏輯可以優(yōu)化,如果以后有分布式存儲(chǔ)需求,可以改為分布式存儲(chǔ),減輕單臺(tái)服務(wù)器的壓力。

第三步:獲取當(dāng)前是第幾個(gè)分塊,計(jì)算文件的最后偏移量

第四步:獲取當(dāng)前文件分塊的字節(jié)數(shù)組,用于獲取文件字節(jié)長度

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

第六步:將分塊的字節(jié)數(shù)組放入到當(dāng)前位置的緩沖區(qū)內(nèi)mappedByteBuffer.put(byte[] b);

第七步:釋放緩沖區(qū)

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

文件夾掃描類

存儲(chǔ)路徑生成類

好了,到此就全部結(jié)束了,如果有疑問或批評(píng),歡迎評(píng)論和私信,我們一起成長一起學(xué)習(xí)。

最后放一張實(shí)現(xiàn)的效果圖

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

總結(jié)

以上是生活随笔為你收集整理的java上传大文件_Java超大文件上传解决办法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。