最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot上傳文件如何返回前端進(jìn)度條

 更新時(shí)間:2024年05月30日 10:33:05   作者:是小故事呀  
這篇文章主要介紹了SpringBoot上傳文件如何返回前端進(jìn)度條問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

SpringBoot上傳文件返回前端進(jìn)度條

話不多說(shuō),直接上干貨

1、需要?jiǎng)?chuàng)建一個(gè)實(shí)現(xiàn)了processListener接口

的實(shí)現(xiàn)類用于監(jiān)聽(tīng)文件上傳進(jìn)度

import javax.servlet.http.HttpSession;
 
import org.apache.commons.fileupload.ProgressListener;
import org.springframework.stereotype.Component;
 
@Component
public class UploadProgressListener implements ProgressListener {
    private HttpSession session;
 
    public void setSession(HttpSession session){
        this.session=session;
        ProgressEntity status = new ProgressEntity();
        session.setAttribute("status", status);
    }
 
    /* pBytesRead  到目前為止讀取文件的比特?cái)?shù)
     * pContentLength 文件總大小
     * pItems 目前正在讀取第幾個(gè)文件
     */
    public void update(long pBytesRead, long pContentLength, int pItems) {
        ProgressEntity status = (ProgressEntity) session.getAttribute("status");
        status.setPBytesRead(pBytesRead);
        status.setPContentLength(pContentLength);
        status.setPItems(pItems);
        System.out.println("UploadProgressListener update ProgressEntity:  "+status.toString());
    }
}

2、返回給前端的上傳進(jìn)度的實(shí)體類

@Component
public class ProgressEntity {
    // 讀取的文件的比特?cái)?shù)
    private long pBytesRead = 0L;
    // 文件的總大小
    private long pContentLength = 0L;
    // 目前正在讀取第幾個(gè)文件
    private int pItems;
 
    private long startTime = System.currentTimeMillis();
 
    public ProgressEntity() {
        pBytesRead = 0L;
        pContentLength = 0L;
    }
 
    public long getPBytesRead() {
        return pBytesRead;
    }
 
    public void setPBytesRead(long bytesRead) {
        pBytesRead = bytesRead;
    }
 
    public long getPContentLength() {
        return pContentLength;
    }
 
    public void setPContentLength(long contentLength) {
        pContentLength = contentLength;
    }
 
    public int getPItems() {
        return pItems;
    }
 
    public void setPItems(int items) {
        pItems = items;
    }
 
    @Override
    public String toString() {
        float tmp = (float) pBytesRead;
        float result = tmp / pContentLength * 100;
        return "ProgressEntity [pBytesRead=" + pBytesRead + ", pContentLength="
                + pContentLength + ", percentage=" + result + "% , pItems=" + pItems + "]";
    }
}

3、繼承CommonsMultipartResolver類

自定義文件上傳處理類

import javax.servlet.http.HttpServletRequest;
 
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.multipart.MultipartException;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
 
public class CustomMultipartResolver extends CommonsMultipartResolver {
 
    @Autowired
    private UploadProgressListener uploadProgressListener;
 
    @Override
    protected MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException {
        String encoding = determineEncoding(request);
        FileUpload fileUpload = prepareFileUpload(encoding);
 
 
        uploadProgressListener.setSession(request.getSession());// 文件上傳進(jìn)度監(jiān)聽(tīng)器設(shè)置session用于存儲(chǔ)上傳進(jìn)度
        fileUpload.setProgressListener(uploadProgressListener);// 將文件上傳進(jìn)度監(jiān)聽(tīng)器加入到 fileUpload 中
        try {
            List<FileItem> fileItems = ((ServletFileUpload) fileUpload).parseRequest(request);
            return parseFileItems(fileItems, encoding);
        } catch (FileUploadBase.SizeLimitExceededException ex) {
            throw new MaxUploadSizeExceededException(fileUpload.getSizeMax(), ex);
        } catch (FileUploadBase.FileSizeLimitExceededException ex) {
            throw new MaxUploadSizeExceededException(fileUpload.getFileSizeMax(), ex);
        } catch (FileUploadException ex) {
            throw new MultipartException("Failed to parse multipart servlet request", ex);
        }
    }
}

4、將spring默認(rèn)的文件上傳處理類取消自動(dòng)配置

并將 multipartResolver 指向我們剛剛創(chuàng)建好的繼承 CommonsMultipartResolver 類的自定義文件上傳處理類

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartResolver;
 
import com.baidu.doclabel.biz.listener.CustomMultipartResolver;
 
 

@EnableAutoConfiguration
@Configuration
public class UploadProgressApplication {
    @Bean(name = "multipartResolver")
    public MultipartResolver multipartResolver() {
        CustomMultipartResolver customMultipartResolver = new CustomMultipartResolver();
        return customMultipartResolver;
    }
}

至此,SpringBoot上傳文件實(shí)現(xiàn)進(jìn)度條代碼編寫完成,看效果

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java向上轉(zhuǎn)型發(fā)生的時(shí)機(jī)知識(shí)點(diǎn)詳解

    java向上轉(zhuǎn)型發(fā)生的時(shí)機(jī)知識(shí)點(diǎn)詳解

    在本篇文章里小編給大家整理分享的是關(guān)于java向上轉(zhuǎn)型發(fā)生的時(shí)機(jī)知識(shí)點(diǎn)內(nèi)容,有興趣的讀者們可以參考下。
    2021-05-05
  • Java常見(jiàn)線上故障的排查方案深入剖析

    Java常見(jiàn)線上故障的排查方案深入剖析

    在Java應(yīng)用的開(kāi)發(fā)和運(yùn)維過(guò)程中,線上問(wèn)題的出現(xiàn)往往難以避免,這篇文章主要介紹了Java常見(jiàn)線上故障的排查的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-09-09
  • IntelliJ?idea報(bào)junit?no?tasks?available問(wèn)題的解決辦法

    IntelliJ?idea報(bào)junit?no?tasks?available問(wèn)題的解決辦法

    這篇文章主要給大家介紹了關(guān)于IntelliJ?idea報(bào)junit?no?tasks?available問(wèn)題的解決辦法,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-11-11
  • Java實(shí)現(xiàn)隨機(jī)出題,10道10以內(nèi)加減法計(jì)算代碼實(shí)例

    Java實(shí)現(xiàn)隨機(jī)出題,10道10以內(nèi)加減法計(jì)算代碼實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)隨機(jī)出題,10道10以內(nèi)加減法計(jì)算,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java Optional實(shí)踐(小結(jié))

    Java Optional實(shí)踐(小結(jié))

    這篇文章主要介紹了Java Optional實(shí)踐(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • Springboot中動(dòng)態(tài)語(yǔ)言groovy介紹

    Springboot中動(dòng)態(tài)語(yǔ)言groovy介紹

    Apache的Groovy是Java平臺(tái)上設(shè)計(jì)的面向?qū)ο缶幊陶Z(yǔ)言,這門動(dòng)態(tài)語(yǔ)言擁有類似Python、Ruby和Smalltalk中的一些特性,可以作為Java平臺(tái)的腳本語(yǔ)言使用,這篇文章主要介紹了springboot中如何使用groovy,需要的朋友可以參考下
    2022-09-09
  • 如何使用兩個(gè)棧實(shí)現(xiàn)隊(duì)列Java

    如何使用兩個(gè)棧實(shí)現(xiàn)隊(duì)列Java

    這篇文章主要介紹了如何使用兩個(gè)棧實(shí)現(xiàn)隊(duì)列Java,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 前端如何調(diào)用后端接口進(jìn)行數(shù)據(jù)交互詳解(axios和SpringBoot)

    前端如何調(diào)用后端接口進(jìn)行數(shù)據(jù)交互詳解(axios和SpringBoot)

    一般來(lái)講前端不會(huì)給后端接口,而是后端給前端接口的情況比較普遍,下面這篇文章主要給大家介紹了關(guān)于前端如何調(diào)用后端接口進(jìn)行數(shù)據(jù)交互的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • java 實(shí)現(xiàn)取int型的第二個(gè)字節(jié)的數(shù)

    java 實(shí)現(xiàn)取int型的第二個(gè)字節(jié)的數(shù)

    這篇文章主要介紹了java 實(shí)現(xiàn)取int型的第二個(gè)字節(jié)的數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java線程池核心參數(shù)原理及使用指南

    Java線程池核心參數(shù)原理及使用指南

    本文詳細(xì)介紹了Java線程池的基本概念、核心類、核心參數(shù)、工作原理、常見(jiàn)類型以及最佳實(shí)踐,通過(guò)理解每個(gè)參數(shù)的含義和工作原理,可以更好地配置線程池,提高系統(tǒng)性能,感興趣的朋友跟隨小編一起看看吧
    2025-12-12

最新評(píng)論

乐亭县| 宁夏| 教育| 阜南县| 布拖县| 隆林| 江孜县| 团风县| 巴青县| 奉贤区| 鄂温| 五原县| 古蔺县| 长岭县| 伽师县| 吴旗县| 金山区| 祥云县| 永胜县| 昆明市| 西充县| 五家渠市| 瓮安县| 孝义市| 黄浦区| 都兰县| 湖南省| 资讯 | 确山县| 江源县| 安新县| 门源| 饶河县| 乳源| 巴中市| 苍南县| 乌审旗| 临潭县| 天柱县| 法库县| 临沧市|