首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 文件上傳進度條實現方案(附 Demo 原始碼下載)

     編輯:Java 相關知識

前言

在 Web 開發中,提供文件上傳進度條能大幅提升用戶體驗。本文介紹如何利用 Apache Commons FileUpload 元件的 ProgressListener 介面,結合 Session 機制,實現即時顯示上傳進度的功能,並提供完整的 Demo 原始碼供下載參考。

核心原理

Commons FileUpload 提供了 ProgressListener 介面,其 update(long pBytesRead, long pContentLength, int pItems) 方法會在讀取上傳數據時被反覆呼叫。我們只需實作此介面,將已讀取位元組數(pBytesRead)、總大小(pContentLength)等資訊存入 Session,前端即可透過輪詢另一個 Servlet 取得進度並更新進度條。

關鍵程式碼實現

1. 實作 ProgressListener

package lc.progress;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import lc.progress.vo.FileUploadStatus;
import org.apache.commons.fileupload.ProgressListener;

public class MyProgressListener implements ProgressListener {
    private HttpSession session;

    public MyProgressListener(HttpServletRequest req) {
        this.session = req.getSession();
        FileUploadStatus status = new FileUploadStatus();
        session.setAttribute("status", status);
    }

    @Override
    public void update(long pBytesRead, long pContentLength, int pItems) {
        FileUploadStatus status = (FileUploadStatus) session.getAttribute("status");
        status.setBytesRead(pBytesRead);
        status.setContentLength(pContentLength);
        status.setItems(pItems);
    }
}

2. 在上傳 Servlet 中註冊 Listener

MyProgressListener listener = new MyProgressListener(request);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setProgressListener(listener);

3. 前端輪詢進度

前端使用 JavaScript 定時請求一個專門的 Servlet,從 Session 中讀取 FileUploadStatus 物件,計算百分比並更新頁面進度條。完整前端邏輯請參考下載的 Demo 原始碼。

總結

此方案架構清晰:後端負責記錄進度狀態,前端負責展示。適用於中小型文件上傳場景。完整專案結構與配置請下載文末附件的原始碼進行研究。


Demo 原始碼下載: 點此下載完整範例專案

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved