精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

亚洲av中文无码乱人伦在线视色| 日韩av手机在线播放| 日本免费中文字幕在线| 国产精品99久久久久久久vr| 97免费视频在线| 日本美女xxx| 日韩一区二区三区精品视频第3页 日韩一区二区三区精品 | 一区二区精品视频在线观看| 欧美成人嫩草网站| 亚洲女人天堂视频| 性鲍视频在线观看| 久久sese| 一区二区三区小说| 日韩视频精品| 免费看av毛片| 久久精品国产精品亚洲综合| 久久久久久久久久久91| 99久久99久久精品免费| 成人另类视频| 欧美裸体bbwbbwbbw| 国产 国语对白 露脸| 国产日韩精品在线看| 国产a视频精品免费观看| 国产v综合ⅴ日韩v欧美大片| 国产女人18水真多毛片18精品| 欧美激情影院| 欧美一区二区三区不卡| 免费看黄色一级大片| 毛片在线导航| 国产精品卡一卡二| 日本高清视频一区二区三区| 黄色av网址在线| 激情久久久久久久久久久久久久久久| 奇米成人av国产一区二区三区| a级片在线观看免费| 不卡中文一二三区| 亚洲人成电影网站色xx| 国产精品一级黄片| 国产成人一二片| 欧美一区二区三区婷婷月色| 无码人妻丰满熟妇区毛片| 第一中文字幕在线| 亚洲永久免费视频| 成年人视频大全| 日本在线www| 日本一区二区动态图| 欧美日韩另类丝袜其他| 视频一区二区在线播放| 99热精品一区二区| 精品国产电影| 五十路在线视频| av中文字幕不卡| 国产日韩欧美亚洲一区| 囯产精品一品二区三区| 高清成人在线观看| 国产98在线|日韩| 亚洲免费成人网| 国产.欧美.日韩| 国产精品二区三区| 国产18精品乱码免费看| 成人av免费在线| 国内精品久久久久久久果冻传媒| 黄色av小说在线观看| 成人毛片在线观看| 国内精品一区二区| 国产综合视频一区二区三区免费| 久久综合久久鬼色| 日韩精品欧美一区二区三区| 国产精品视频二区三区| 国产精品丝袜一区| 黄色一级片网址| 亚洲精品白浆| 亚洲国产精品尤物yw在线观看| 欧美一级免费播放| 这里有精品可以观看| 欧美性感美女h网站在线观看免费| 日日碰狠狠添天天爽超碰97| 免费观看一级欧美片| 在线一区二区三区四区五区| 99热这里只有精品在线播放| gogo大尺度成人免费视频| 欧美videos大乳护士334| 人体私拍套图hdxxxx| 亚洲资源网你懂的| 中文字幕v亚洲ⅴv天堂| 日韩女优一区二区| 国产伦理一区| 国产在线久久久| 亚洲男女视频在线观看| 久久久www成人免费无遮挡大片| 色噜噜狠狠一区二区三区| 国产在线69| 黄网站色欧美视频| www.com操| 久久影视三级福利片| 国产一区二区av| 九九视频免费看| 国产模特精品视频久久久久| 国产日韩在线免费| 天天操天天舔天天干| 国产精品嫩草久久久久| 欧美视频在线观看视频| 日韩欧美2区| 精品国产一区二区三区不卡| 亚洲av成人无码久久精品| 国内精品福利| 国产精品欧美一区二区| 人妻精品一区二区三区| 国产精品麻豆欧美日韩ww| 青春草国产视频| 欧洲亚洲精品| 精品视频在线播放色网色视频| 少妇被躁爽到高潮无码文| 先锋影音国产一区| 国产福利不卡| 成人ww免费完整版在线观看| 日本道精品一区二区三区| 女同性αv亚洲女同志| av伊人久久| 7m第一福利500精品视频| 91国偷自产中文字幕久久| 2020国产成人综合网| 国产成人在线小视频| 国产成人久久精品一区二区三区| 亚洲品质视频自拍网| 国产一级特黄a高潮片| 国产一区二区在线免费观看| 茄子视频成人在线观看 | 国产最新精品| 91精品国产乱码久久久久久蜜臀 | 免费视频网站www| 久久er精品视频| 日韩和欧美的一区二区| www.成人爱| 亚洲国产精品久久精品怡红院| 成人免费视频国产免费观看| 免费高清在线一区| 日本中文不卡| 欧美男女交配| 亚洲情综合五月天| 亚洲成人av影片| 91丨porny丨户外露出| 黄色片网址在线观看| 日韩中文字幕无砖| 欧美国产乱视频| 国产免费叼嘿网站免费| 国产精品毛片久久久久久久| 国产熟人av一二三区| 国产成人3p视频免费观看| 欧美一区视频在线| 三级在线播放| 色综合咪咪久久| 免费污网站在线观看| 日韩福利视频网| 亚洲精品乱码久久久久久蜜桃91 | 亚洲综合日韩在线| 里番在线观看网站| 91精品国产欧美一区二区 | 天天综合色天天综合| 日韩av无码一区二区三区不卡| 亚洲私拍自拍| 久久久久资源| 美女100%一区| xxxx性欧美| 午夜精品在线播放| 一区二区久久久| 天堂久久久久久| 久久电影一区| 亚洲午夜精品福利| 免费看日产一区二区三区 | 久久久久久久福利| 97久久久精品综合88久久| 黄色片视频在线播放| 成人嫩草影院| 97视频资源在线观看| av中文资源在线资源免费观看| 日韩麻豆第一页| 人人妻人人爽人人澡人人精品| 国产精品视频免费看| 国产精品igao网网址不卡| 亚洲精品孕妇| 日韩中文一区二区三区| 国产精品视频一区二区三区| 国外色69视频在线观看| 国自产拍在线网站网址视频| 欧美精品久久一区| 国产在线成人精品午夜| 国产欧美综合色| 国产黄色一区二区三区 | 97成人精品视频在线观看| 国产日本在线| 日韩欧美一级二级三级| 国产一区二区视频网站| 综合久久一区二区三区| 亚洲国产精品成人综合久久久| 欧美aaa在线| 国产精品自拍合集| 欧洲三级视频| 好吊色欧美一区二区三区四区| 99久久婷婷国产综合精品首页| 欧美日韩成人在线视频| 国产女主播在线写真| 欧美成人精品1314www| 国产天堂第一区| 亚洲图片欧美色图| 林心如三级全黄裸体| 成人免费看视频| 永久免费的av网站| 亚洲永久网站| 男人添女人下部视频免费| 国产中文精品久高清在线不| 国产精品日韩一区二区 | 欧美一级久久| www.男人天堂网| 日韩在线观看一区| 欧美日本韩国国产| 成人台湾亚洲精品一区二区| 成人h猎奇视频网站| 电影一区二区三| 久久久亚洲福利精品午夜| 亚洲1卡2卡3卡4卡乱码精品| 日韩电视剧免费观看网站| 97人妻精品一区二区三区软件| 一本久久精品一区二区| xxxx 国产| 亚洲精品乱码久久久久久日本蜜臀| 干b视频在线观看| 99精品久久免费看蜜臀剧情介绍| 欧洲在线免费视频| 乱一区二区av| 亚洲一区二区三区四区五区xx| 日韩午夜一区| 成年人视频网站免费| 亚洲国产精品日韩专区av有中文| 日韩一区二区电影在线观看| 国产91一区| 麻豆成人小视频| 国产精品美女在线观看直播| 亚洲最大福利视频网| 四虎国产精品永久在线国在线| 国产精品久久77777| 伊人网在线播放| 97香蕉超级碰碰久久免费软件| 污视频网站在线免费| 欧美精品在线看| 在线中文字幕电影| 九九精品在线观看| 伊人春色在线观看| 欧美黄色性视频| 黄色在线看片| 久久免费少妇高潮久久精品99| 蜜桃传媒在线观看免费进入| 久久人人爽人人爽人人片av高请| 欧美黄色视屏| 992tv在线成人免费观看| 操人在线观看| 欧美一区二区三区精品电影| gay欧美网站| 国产精品视频永久免费播放| 国产原创一区| 92裸体在线视频网站| 精品久久亚洲| 国产精品我不卡| 精品精品国产毛片在线看| 蜜桃麻豆www久久国产精品| 国产欧美久久一区二区三区| 亚洲成人蜜桃| 亚洲成av人电影| 欧美精品在欧美一区二区| 欧美成人日韩| 俄罗斯av网站| 男女男精品视频网| 自拍一级黄色片| www.亚洲国产| 亚洲一区二区三区日韩| 中文字幕一区二区三区视频| 久久久香蕉视频| 色婷婷激情一区二区三区| 亚洲最新av网站| 日韩一区二区三| 三级在线观看网站| 永久免费精品影视网站| 成人片在线看| 欧洲美女免费图片一区| 欧美国产视频| 国产精品一区在线观看| 九九热线有精品视频99| 中文字幕第一页亚洲| 亚洲三级影院| 国产又黄又猛又粗又爽的视频| 国产精品1区2区3区在线观看| 99久久免费看精品国产一区| 国产精品毛片大码女人| 国产精品第二十页| 欧美日韩精品一区二区三区蜜桃| 国产强伦人妻毛片| 亚洲精品视频网上网址在线观看| 欧美a在线看| 欧美亚洲日本黄色| 999精品嫩草久久久久久99| 久久精品日产第一区二区三区乱码 | 欧美一级日韩免费不卡| 四虎在线观看| 久久精品视频导航| 在线精品亚洲欧美日韩国产| 亚洲va电影大全| 国产一区二区电影在线观看| 天堂а√在线中文在线| 日韩一区欧美二区| 国产高潮视频在线观看| 中文字幕av一区 二区| 成人免费视频毛片| 精品久久久久久久久久久久久久久 | 成人a在线观看高清电影| 精品国产一区二区三区麻豆小说 | 自拍偷拍色综合| 亚洲国产欧美一区| www久久日com| 国产精品视频永久免费播放| 嫩草一区二区三区| 国产深夜男女无套内射| 国产剧情一区二区| 少妇视频一区二区| 欧美亚洲动漫精品| 精品亚洲综合| 欧美在线视频网站| 久久久久久毛片免费看| 日韩中文字幕在线不卡| 狠狠色丁香婷综合久久| 日本一二三不卡视频| 一本一道综合狠狠老| 三级国产在线观看| 91av在线国产| 牛牛影视久久网| 精品无码国产一区二区三区av| 国产精选一区二区三区| 中文字幕电影av| 欧美三级日韩三级| 8888四色奇米在线观看| 国产精品高清在线观看| 国产欧美日韩影院| 久久综合久久色| 久久久精品日韩欧美| 潘金莲一级淫片aaaaaa播放| 亚洲精品一区av在线播放| 日产福利视频在线观看| 国内精品**久久毛片app| 国产视频亚洲| 欧美一区二区三区小说| 伊人影院综合网| 欧美在线视频日韩| 成年女人的天堂在线| 国产人妖伪娘一区91| 羞羞答答成人影院www| 狠狠干狠狠操视频| 亚洲免费观看高清完整版在线观看熊| 在线中文字幕网站| 久久久国产影院| 8x国产一区二区三区精品推荐| av在线免费观看国产| 成人动漫一区二区在线| 国产精品久久久久久99| 亚洲欧美日本精品| 免费视频成人| 蜜臀在线免费观看| 成人福利视频网站| 日韩免费av网站| xxx一区二区| 一区二区三区四区视频免费观看| 精品国产一区二区三区无码| 久久亚洲捆绑美女| 中文字幕+乱码+中文乱码91| 久久久999成人| 国产ts一区| 少妇性l交大片| 亚洲三级在线看| 日韩一级片免费在线观看| 日本精品久久电影| 久久国产综合| 亚洲最大视频网| 色综合中文字幕国产| 黄色av网站在线播放| 国产一区二区三区四区五区在线 | 色综合老司机第九色激情| 日本成人7777| 日本人69视频| 偷拍与自拍一区| 免费av在线网站| 久久av一区二区| 国产一区中文字幕| 三级视频在线观看| 欧美成人精品一区二区| 亚洲区小说区图片区qvod按摩| 亚洲免费在线播放视频| 色综合久久天天综合网| 欧洲性视频在线播放| 婷婷久久青草热一区二区| 高清成人在线观看| 亚洲网站在线免费观看| 97精品一区二区视频在线观看|