精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Spring Boot超大文件上傳的正確方式

開發(fā) 前端
分片上傳文件指的是將大文件分割成較小的部分(即分片),然后依次或并行地將這些分片上傳到服務(wù)器的過程。一旦所有分片都上傳完畢,服務(wù)器會將它們合并以重新創(chuàng)建出原始文件。

環(huán)境:SpringBoot3.4.0

1. 簡介

文件上傳功能是個非常常見的需求,它允許用戶將本地計算機上的文件通過網(wǎng)絡(luò)傳輸?shù)竭h程服務(wù)器。然而,如果不對大文件的上傳進行適當(dāng)?shù)目刂?,很可能會對服?wù)器造成以下不良影響:

  • 網(wǎng)絡(luò)不穩(wěn)定性:大文件上傳耗時較長,期間網(wǎng)絡(luò)的任何不穩(wěn)定性都可能導(dǎo)致上傳失敗,需要重新上傳整個文件,這不僅耗時而且效率低下。
  • 帶寬限制:在帶寬有限的網(wǎng)絡(luò)環(huán)境中,大文件上傳可能會占用大量帶寬,導(dǎo)致其他網(wǎng)絡(luò)活動受阻,影響用戶體驗。
  • 服務(wù)器負擔(dān):一次性處理大量數(shù)據(jù)會給服務(wù)器帶來巨大負擔(dān),尤其是在高并發(fā)的情況下,可能導(dǎo)致服務(wù)器響應(yīng)緩慢或崩潰。

如何解決大文件上傳的問題呢?接下來,我們將介紹一種有效的解決方案——分片上傳。

分片上傳文件指的是將大文件分割成較小的部分(即分片),然后依次或并行地將這些分片上傳到服務(wù)器的過程。一旦所有分片都上傳完畢,服務(wù)器會將它們合并以重新創(chuàng)建出原始文件。

分片上傳原理:

  • 在客戶端將文件分割成較小的分片
  • 將每個分片單獨上傳到服務(wù)器
  • 所有分片上傳完成后,利用這些分片重新構(gòu)建出原始文件

接下來,我們將通過Spring Boot 3與Vue 3的結(jié)合來實現(xiàn)大文件的分片上傳功能。

2. 實戰(zhàn)案例

2.1 前端頁面

我們僅為了演示文件的分片上傳功能,所以設(shè)計的頁面非常簡潔,僅包含三個按鈕,頁面效果如下所示:圖片

前端代碼

<el-upload ref="upload" class="upload-demo"
  :limit="1" :auto-upload="false" :http-request="uploadFile">
  <template #trigger>
    <el-button type="primary" style="margin-right: 10px;">選擇文件</el-button>
  </template>
  <el-button class="ml-3" type="success" @click="submitUpload">
    上傳文件
  </el-button>
</el-upload>
<el-button class="ml-3" type="primary" @click="mergeFile">合并文件</el-button>

JavaScript代碼

<script setup name="upload">
  import { ref } from 'vue'


  const upload = ref('')
  let fileName = ''
  /**拆分文件,這里估計將文件每2M進行拆分*/
  const uploadFileInChunks = file => {
    const chunkSize = 1024 * 1024 * 2
    let start = 0
    let chunkIndex = 0


    while (start < file.size) {
      const chunk = file.slice(start, start + chunkSize)
      console.log(chunk)
      fileName = file.name
      uploadChunk(chunk, chunkIndex, fileName)
      start += chunkSize
      chunkIndex++
    }
  }
  /**對每一個拆分的文件進行上傳;這就就成了小文件上傳*/
  const uploadChunk = (chunk, chunkIndex, fileName) => {
    const formData = new FormData()
    formData.append('chunk', chunk)
    formData.append('chunkIndex', chunkIndex)
    formData.append('fileName', fileName)


    fetch('http://localhost:8080/upload-chunk', {
      method: 'POST',
      body: formData
    }).then(resp => {
      console.log(resp)
    })
  }
  const uploadFile = (opt) => {
    uploadFileInChunks(opt.file)
  }
  const submitUpload = () => {
    upload.value.submit()
  }
  /**合并文件*/
  const mergeFile = () => {
    const formData = new FormData()
    formData.append('fileName', fileName)
    fetch('http://localhost:8080/merge-chunks', {
      method: 'POST',
      body: formData
    }).then(resp => {
      console.log(resp)
    })
  }
</script>

前端代碼還是非常簡單的;其核心就是拿到上傳文件的File對象,然后對文件進行拆分。

2.2 文件上傳接口

@RestController
public class ChunkController {
  private static final String TEMP_DIR = "d:\\upload\\";
  @PostMapping("/upload-chunk")
  public ResponseEntity<String> uploadChunk(
      @RequestParam("chunk") MultipartFile chunk,
      @RequestParam("chunkIndex") int chunkIndex, 
      @RequestParam("fileName") String fileName) throws IOException {
    File dir = new File(TEMP_DIR + fileName);
    if (!dir.exists()) {
      dir.mkdirs();
    }
    File chunkFile = new File(dir, "chunk_" + chunkIndex);
    try (OutputStream os = new FileOutputStream(chunkFile)) {
      os.write(chunk.getBytes());
    }
    return ResponseEntity.ok("Chunk " + chunkIndex + " uploaded successfully.");
  }
}

這里非常的簡單與我們平時的文件上傳一模一樣。

接下來,我們就可以進行文件的上傳了

圖片圖片

這里選擇了一個25MB大小的文件,點擊上傳后控制臺輸出:

圖片圖片

這里拆分成了13個小文件進行上傳。

最終,后臺服務(wù)上的文件如下:

圖片

以上傳的文件名創(chuàng)建了目錄,存分塊后的小文件。

文件上傳完成后,最后我們就要對這些文件進行合并處理了。

2.3 合并文件接口

@RestController
public class ChunkController {
  private static final String TEMP_DIR = "d:\\upload\\";
  private static final String TARGET_DIR = "d:\\upload\\result\\";
  
  @PostMapping("/merge-chunks")
  public ResponseEntity<String> mergeChunks(
      @RequestParam("fileName") String fileName) throws IOException {
    File dir = new File(TEMP_DIR + fileName);
    File mergedFile = new File(TARGET_DIR + fileName);
    try (OutputStream os = new FileOutputStream(mergedFile)) {
      for (int i = 0, len = dir.listFiles().length; i < len; i++) {
        File chunkFile = new File(dir, "chunk_" + i);
        Files.copy(chunkFile.toPath(), os);
        chunkFile.delete();
      }
    }
    dir.delete();
    return ResponseEntity.ok("文件合并完成");
  }
}

這里就是遍歷目錄中的所有文件,然后按照順序?qū)懭氲揭粋€目標文件中即可。這樣我們就完成了文件的合并。

圖片

到此我們實現(xiàn)了文件的分塊上傳功能。

責(zé)任編輯:武曉燕 來源: Springboot全家桶實戰(zhàn)案例源碼
相關(guān)推薦

2009-12-07 09:45:23

PHP上傳大文件設(shè)置

2025-04-10 08:03:31

Spring系統(tǒng)

2021-01-25 14:10:49

Spring BootVueJava

2021-09-15 16:20:02

Spring BootFilterJava

2021-01-15 12:02:25

java 大文件工具

2021-05-10 07:33:10

Java開源工具

2025-07-29 04:11:00

SpringJSON數(shù)據(jù)

2009-11-16 11:41:19

PHP上傳大文件

2022-06-13 14:06:33

大文件上傳前端

2025-03-11 00:55:00

Spring停機安全

2024-12-26 11:01:22

2023-03-09 12:04:38

Spring文件校驗

2009-07-21 15:38:31

2024-01-23 08:47:13

BeanSpring加載方式

2025-04-30 08:39:33

SpringMVC接口

2023-11-01 15:07:51

環(huán)境配置方式

2021-03-11 14:16:47

Spring Boo開發(fā)腳手架

2022-05-17 10:45:55

項目VueElementUI

2021-01-15 11:40:44

文件Java秒傳

2025-08-04 01:55:00

點贊
收藏

51CTO技術(shù)棧公眾號

婷婷丁香激情网| 国产亚洲第一区| √天堂中文官网8在线| 巨大黑人极品videos精品| 综合久久久久久久| 国产一区二区三区四区五区在线 | 亚洲乱码中文字幕| 国内一区在线| 91中文字幕在线视频| 激情综合电影网| 国产一区二区免费| 国产清纯白嫩初高中在线观看性色| 制服丝袜专区在线| 亚洲精品写真福利| 日韩精品一区二区三区色偷偷| 国产日产亚洲系列最新| 久久动漫亚洲| 欧美国产第一页| 日本污视频网站| 国产精品毛片视频| 777欧美精品| 无码aⅴ精品一区二区三区浪潮| 老司机午夜在线视频| 久久午夜老司机| 91亚色免费| 在线视频欧美亚洲| 免费在线观看成人av| 欧美激情a∨在线视频播放| 美女100%露胸无遮挡| 色综合www| 精品对白一区国产伦| 一级黄色特级片| 国产精品迅雷| 精品国产户外野外| 欧美一区二区激情| 伊人春色在线观看| 国产精品夫妻自拍| 免费观看国产成人| 五月婷婷丁香六月| 不卡视频免费播放| 4444kk亚洲人成电影在线| 在线播放国产一区| 免费视频一区二区| 国产精品久久久久久久电影| 黄色片网站在线免费观看| 在线日韩中文| 久久久免费在线观看| 91porn在线视频| 91精品福利| 久久久精品久久| 免费黄色激情视频| 久久大综合网| 久久精品国亚洲| 手机av在线看| 欧美福利电影在线观看| 欧美精品在线免费| 欧美成人一二三区| 国产一在线精品一区在线观看| 欧美成年人视频| 久久久精品一区二区涩爱| 午夜久久福利| 久久免费精品日本久久中文字幕| 精品视频久久久久| 夜夜嗨网站十八久久| 欧美一级高清免费| 日本一本在线观看| 久久精品国产免费看久久精品| 国产日韩欧美在线观看| 国产精品羞羞答答在线| 国产传媒久久文化传媒| 国产伦精品一区二区三区照片| 丰满人妻熟女aⅴ一区| kk眼镜猥琐国模调教系列一区二区| 精品国产一区二区三区麻豆免费观看完整版| 日韩一区免费视频| 久久这里只有精品首页| 亚洲欧美综合一区| 在线中文字幕电影| 欧美日韩亚洲高清| 蜜臀av免费观看| 精品国产麻豆| 日韩av在线电影网| 九九九视频在线观看| 婷婷中文字幕一区| 97精品视频在线播放| 无码日韩精品一区二区| 久久国产视频网| 国产精华一区| 国产视频二区在线观看| 亚洲视频你懂的| 免费看又黄又无码的网站| 日本欧美韩国| 精品噜噜噜噜久久久久久久久试看 | 成人福利电影| 在线视频国内自拍亚洲视频| 99久久99精品| 伊甸园亚洲一区| 日韩在线激情视频| 午夜影院在线看| 久久国产精品免费| 国严精品久久久久久亚洲影视| 成年人在线观看| 亚洲综合色视频| 国产野外作爱视频播放| 成人av动漫| 色av吧综合网| 亚洲欧美综合另类| 国产一区亚洲一区| 欧洲亚洲一区二区| 欧洲性视频在线播放| 欧美自拍丝袜亚洲| 国产精品无码一区二区三| 99久久影视| 日韩免费观看网站| 女人18毛片一区二区三区| 国产精品蜜臀av| 久久9精品区-无套内射无码| 一区二区亚洲视频| y97精品国产97久久久久久| 国产一级18片视频| 成人涩涩免费视频| 亚洲高清乱码| 成人欧美大片| 亚洲精品乱码久久久久久按摩观| jizz亚洲少妇| 久久www免费人成看片高清| 久久香蕉综合色| 爱看av在线入口| 日韩欧美一区二区在线视频| 日本女人性生活视频| 爽好多水快深点欧美视频| 精品中文字幕人| 国产黄色大片在线观看| 91精品国产综合久久蜜臀| 亚洲欧美日韩第一页| 久久久久欧美精品| 欧美一区二区三区成人久久片| 大香伊人中文字幕精品| 日韩欧美精品在线视频| 黄色精品视频在线观看| 麻豆免费看一区二区三区| 日本高清一区| 亚洲伦乱视频| 亚洲人免费视频| 中文字幕av影院| www国产精品av| 黄色国产精品视频| 竹菊久久久久久久| 亲爱的老师9免费观看全集电视剧| 男人天堂综合网| 午夜视频一区在线观看| 亚洲精品久久一区二区三区777| 女人天堂亚洲aⅴ在线观看| 成人日韩在线电影| 欧洲不卡视频| 日韩丝袜美女视频| 久久久久无码精品国产| 国产盗摄精品一区二区三区在线| 日本高清视频免费在线观看| 日本精品在线播放| 欧美高清电影在线看| 免费看黄色一级视频| 黄色成人av在线| 性久久久久久久久久| 久久国产精品99国产| 日本精品一区二区三区视频| 亚洲精品一区三区三区在线观看| 亚洲天堂免费观看| 91欧美日韩麻豆精品| 最新热久久免费视频| av在线网站免费观看| 亚洲网站视频| 裸模一区二区三区免费| 成人国产精选| 欧美大奶子在线| 午夜影院在线视频| 欧洲人成人精品| 日本a级片视频| 91在线视频播放| 超碰在线公开97| 欧美日韩蜜桃| 日本三级中国三级99人妇网站| 国产第一亚洲| 欧美激情精品久久久久久久变态| 天堂中文在线资源| 欧美三区在线观看| 久草资源在线视频| 久久久久久久久久久黄色| 最新免费av网址| 国产色综合网| 免费国产成人看片在线| 开心激情综合| 国产精品入口日韩视频大尺度| 色老头在线观看| 国产午夜精品全部视频播放| 国产成人精品a视频| 一本到不卡免费一区二区| 国产精品白丝喷水在线观看| 99精品国产91久久久久久| 亚洲va综合va国产va中文| av成人黄色| 亚洲国产精品影视| 日本天堂一区| 91免费看网站| 日本电影久久久| 性欧美xxxx视频在线观看| 日本欧美在线视频免费观看| 日韩电影大全免费观看2023年上 | 欧美v国产在线一区二区三区| 黄色片中文字幕| 亚洲国产精品麻豆| 91传媒免费观看| 久久久99免费| 在线精品一区二区三区| 国产白丝精品91爽爽久久| 日韩一级免费片| 老司机精品导航| 免费看日本毛片| 韩日视频一区| 国产日韩欧美大片| 色婷婷一区二区三区| 欧美一区1区三区3区公司 | 国产美女在线观看一区| 国产性生交xxxxx免费| 亚洲高清电影| 男人草女人视频| 91精品综合| 亚洲精品一区二区三区av| 色综合www| 九色一区二区| 日韩在线黄色| 裸模一区二区三区免费| 色婷婷狠狠五月综合天色拍 | 天天久久综合网| 久久99精品一区二区三区| 福利在线一区二区三区| 天堂在线一区二区| 波多野结衣家庭教师视频| 国产精品日韩精品欧美精品| 久激情内射婷内射蜜桃| 好吊一区二区三区| www.好吊操| 黄色日韩在线| 日韩a∨精品日韩在线观看| 在线精品福利| 免费在线激情视频| 久久精品一区二区国产| 麻豆传传媒久久久爱| 丝袜诱惑制服诱惑色一区在线观看 | 日韩视频在线观看一区二区| av免费在线不卡| 欧美变态tickling挠脚心| 草草视频在线播放| 精品国产乱码91久久久久久网站| 亚洲精品一区二区三区新线路| 精品日韩一区二区三区免费视频| 丰满少妇高潮在线观看| 日韩成人在线电影网| 精品久久久久一区二区三区| 国产亚洲欧美日韩美女| 在线观看免费版| 操人视频在线观看欧美| 国产经典三级在线| 欧美又大又硬又粗bbbbb| **欧美日韩在线观看| 国产精品美女www爽爽爽视频| 桃花岛tv亚洲品质| 国产主播精品在线| 亚洲国产视频二区| 欧美人与性禽动交精品| 清纯唯美日韩| 好吊色视频988gao在线观看| 99视频一区| 欧美日韩怡红院| 国产伦精品一区二区三区免费 | www.日本一区| 国产一区二区三区不卡在线观看| 国产吃瓜黑料一区二区| 91麻豆精品一区二区三区| 国产精成人品免费观看| 亚洲免费大片在线观看| 一级免费在线观看| 欧美日精品一区视频| www.国产欧美| 亚洲视频在线观看免费| 成年视频在线观看| 国产91精品久| 国产专区精品| 蜜桃av噜噜一区二区三区| 亚洲欧美网站在线观看| 国产免费毛卡片| 国产综合色视频| 精品夜夜澡人妻无码av| 亚洲私人黄色宅男| 五月天激情四射| 欧美一级淫片007| 欧美日韩激情视频一区二区三区| 久久精品最新地址| 亚洲v.com| 97伦理在线四区| 欧美精品尤物在线观看| 丁香花在线影院观看在线播放| 蜜桃在线一区二区三区| 亚洲观看黄色网| 一区二区三区四区精品在线视频| 国产香蕉视频在线| 91精品婷婷国产综合久久| 天堂网在线资源| 久久视频在线观看免费| 国产精品久久久久av电视剧| 狠狠爱一区二区三区| 91精品国产视频| 美女网站视频黄色| 久久久美女艺术照精彩视频福利播放| 免费人成视频在线| 欧美疯狂做受xxxx富婆| 国产高清免费在线播放| 欧美亚洲第一页| 成人台湾亚洲精品一区二区| 一本二本三本亚洲码 | 黑人精品xxx一区一二区| 成人黄色免费视频| www国产精品com| 国产成人精品一区二区三区在线| 精品一区二区久久久久久久网站| 欧美日韩伊人| 无套内谢丰满少妇中文字幕 | av一区二区三区| 真实国产乱子伦对白在线| 欧美肥胖老妇做爰| 免费黄网站在线| 国产日韩av在线播放| 波多野结衣在线观看一区二区| 青青草原成人网| 久久综合色8888| www日韩精品| 日韩精品在线免费观看视频| 免费一二一二在线视频| 精品91免费| 国产一区二区三区的电影 | 亚洲精品久久久久久无码色欲四季 | 日韩一区二区三区四区| 97caopron在线视频| 亚洲一区亚洲二区| 永久亚洲成a人片777777| 成人亚洲免费视频| 亚洲欧美日韩在线播放| 精品国自产在线观看| 久久99热这里只有精品国产| 亚洲综合网站| av日韩一区二区三区| 91影院在线观看| 日韩久久中文字幕| 夜夜嗨av一区二区三区四区| 素人啪啪色综合| 伊人久久青草| 国产乱码字幕精品高清av| 欧美三根一起进三p| 欧美一区二区三区思思人| 免费网站在线观看人| 久久精品一二三区| 日韩电影一区二区三区| 日本 欧美 国产| 欧美mv日韩mv| 性国裸体高清亚洲| 神马影院一区二区三区| 韩国毛片一区二区三区| 久久久久99精品成人片毛片| 亚洲跨种族黑人xxx| 精品176极品一区| 妺妺窝人体色www看人体| 99久久免费精品高清特色大片| 国产婷婷色一区二区在线观看| 色播久久人人爽人人爽人人片视av| 国产95亚洲| 毛片在线视频播放| 欧美国产精品专区| www.天天干.com| 国产成一区二区| 你懂的视频一区二区| 少妇真人直播免费视频| 欧美放荡的少妇| 亚洲伊人av| 91xxx视频| 久久你懂得1024| 国产男女猛烈无遮挡| 97超级碰碰碰| 欧美疯狂party性派对| 欧美熟妇精品一区二区蜜桃视频| 色香蕉成人二区免费| 制服丝袜在线播放| 日韩精品成人一区二区在线观看| 国产精品18久久久久久久久 | 男女视频一区二区| 久久久久久久久久久久国产| 国产一区二区三区丝袜 | 国产在线乱码一区二区三区| 亚洲天堂一区在线| 欧美精品一区二区三区国产精品| 精品国产一区二区三区小蝌蚪|