欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot上傳文件如何返回前端進度條

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

SpringBoot上傳文件返回前端進度條

話不多說,直接上干貨

1、需要創(chuàng)建一個實現(xiàn)了processListener接口

的實現(xiàn)類用于監(jiā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  到目前為止讀取文件的比特數
     * pContentLength 文件總大小
     * pItems 目前正在讀取第幾個文件
     */
    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、返回給前端的上傳進度的實體類

@Component
public class ProgressEntity {
    // 讀取的文件的比特數
    private long pBytesRead = 0L;
    // 文件的總大小
    private long pContentLength = 0L;
    // 目前正在讀取第幾個文件
    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());// 文件上傳進度監(jiān)聽器設置session用于存儲上傳進度
        fileUpload.setProgressListener(uploadProgressListener);// 將文件上傳進度監(jiān)聽器加入到 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默認的文件上傳處理類取消自動配置

并將 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上傳文件實現(xiàn)進度條代碼編寫完成,看效果

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java異常處理 Throwable實現(xiàn)方法解析

    Java異常處理 Throwable實現(xiàn)方法解析

    這篇文章主要介紹了Java異常處理 Throwable實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • SpringBoot Application的exclude不生效問題及排查

    SpringBoot Application的exclude不生效問題及排查

    這篇文章主要介紹了SpringBoot Application的exclude不生效問題及排查,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java遞歸實現(xiàn)迷宮游戲

    Java遞歸實現(xiàn)迷宮游戲

    這篇文章主要介紹了如何利用Java遞歸方法實現(xiàn)迷宮游戲,下面文章會詳細的從為問題描述開始,清晰的解題思路以及詳細的代碼實現(xiàn),具有一定的參考價值,需要的小伙伴可以參考一下
    2021-12-12
  • Java獲取精確到秒的時間戳方法

    Java獲取精確到秒的時間戳方法

    這篇文章主要為大家詳細介紹了Java獲取精確到秒的時間戳方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Spring Boot面試題總結

    Spring Boot面試題總結

    這篇文章主要介紹了Spring Boot面試題總結,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Java Map.getOrDefault方法詳解

    Java Map.getOrDefault方法詳解

    Map.getOrDefault(Object key, V defaultValue)是Java中Map接口的一個方法,用于獲取指定鍵對應的值,如果鍵不存在,則返回一個默認值,這篇文章主要介紹了Java Map.getOrDefault方法詳解,需要的朋友可以參考下
    2024-01-01
  • 使用springboot結合vue實現(xiàn)sso單點登錄

    使用springboot結合vue實現(xiàn)sso單點登錄

    這篇文章主要為大家詳細介紹了如何使用springboot+vue實現(xiàn)sso單點登錄,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Java 序列化和反序列化實例詳解

    Java 序列化和反序列化實例詳解

    這篇文章主要介紹了Java 序列化和反序列化實例詳解的相關資料,需要的朋友可以參考下
    2017-03-03
  • 基于Java8實現(xiàn)提高Excel讀寫效率

    基于Java8實現(xiàn)提高Excel讀寫效率

    這篇文章主要介紹了基于Java8實現(xiàn)提高Excel讀寫效率,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Java中的關鍵字volatile詳解

    Java中的關鍵字volatile詳解

    這篇文章主要介紹了Java中的關鍵字volatile,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03

最新評論