JAVA文件上传(带进度条)JAVA文件上传(带进度条)

本文介绍了一种使用Java实现文件上传的方法,并加入了上传进度显示的功能。通过自定义监听器实时更新上传进度,并利用DWR进行客户端与服务器交互,使用户能够直观地看到文件上传的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA文件上传(带进度条)

具体请下载源代码:

(1)写文件上传进度监听器类:

package com.my.other;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.ProgressListener;

public class UploadProgressListener implements ProgressListener {

   

    privatelong megaBytes = -1;

    HttpServletRequestrequest = null;

    UploadInfoprogressInfo = null;

   

    publicUploadProgressListener(HttpServletRequestrequest) {

        this.request = request;

        progressInfo = (UploadInfo)request.getSession().getAttribute("uploadInfo");

        if (progressInfo == null) {

           progressInfo = new UploadInfo();

           request.getSession().setAttribute("uploadInfo", progressInfo);

        }

    }

   

    publicvoid update(long pBytesRead, long pContentLength,int pItems) {

        long mBytes = pBytesRead/ 100000;       

        if (megaBytes == mBytes) {

           return;

        }

        megaBytes = mBytes;

 

        if (pContentLength == -1) {

           progressInfo.setStatus("done");

        }else {

           progressInfo.setFileIndex(pItems);

           progressInfo.setTotalSize(pContentLength);

           progressInfo.setBytesRead(pBytesRead);

           progressInfo.setStatus("progress");

        }

    }

}

 

(2)在action中代码如下:

package com.my.other;

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.DiskFileUpload;

import org.apache.commons.fileupload.FileItem;

import org.apache.commons.fileupload.FileUpload;

import org.apache.commons.fileupload.ProgressListener;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

 

public class UploadAction extends Action {

 

    publicActionForward execute(ActionMappingmapping, ActionForm form,

           HttpServletRequest request, HttpServletResponse response)

           throws Exception {       

        request.setCharacterEncoding("utf-8");       

        UploadProgressListener pl = new UploadProgressListener(request);       

        long start_time = System.currentTimeMillis();       

        DiskFileUpload fu = new DiskFileUpload();

        fu.setProgressListener(pl);

        Listitems = fu.parseRequest(request);

        for (int i= 0; i < items.size(); i++) {

           FileItem fi = (FileItem)items.get(i);

           if (fi.isFormField()){

           } else {

               if ("".equals(fi.getName().trim())){

                   continue;

               }

               

               //取文件内容

               String filename = fi.getName();

               int pos = filename.lastIndexOf("//");

               filename = filename.substring(pos+ 1);

               

               fi.write(new File(this.getServlet().getServletContext().getRealPath("//")

                       + "//files//" + filename));

           }

        }

       

        long end_time = System.currentTimeMillis();

        System.out.println("Used time:" + (end_time - start_time) );

        return mapping.findForward("success");

    }

}

 

(3dwr.xml文件配置

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting

2.0//EN""http://www.getahead.ltd.uk/dwr/dwr20.dtd">

<dwr>

    <allow>

       <create javascript="UploadMonitor" creator="new">

            <param name="class">com.my.other.UploadMonitor</param>

       </create>

       <convert match="com.my.other.UploadInfo"converter="bean"></convert>

    </allow>

</dwr>

 

(4dwr调用的服务类:

package com.my.other;

import org.directwebremoting.WebContextFactory;

import javax.servlet.http.HttpServletRequest;

public class UploadMonitor

{

    publicUploadInfo getUploadInfo()

    {

        HttpServletRequest req = WebContextFactory.get().getHttpServletRequest();

 

        if (req.getSession().getAttribute("uploadInfo")!= null)

           return (UploadInfo) req.getSession().getAttribute("uploadInfo");

        else {

           return new UploadInfo();

           

       }           

    }

}

(5)进度信息对象

 

package com.my.other;

 

public class UploadInfo

{

    privatelong totalSize = 0;

    privatelong bytesRead = 0;

    privatelong elapsedTime = 0;

    privateString status = "done";

    privateint fileIndex = 0;

 

    publicUploadInfo()

    {

    }

 

    publicString getStatus()

    {

        return status;

    }

 

    publicvoid setStatus(String status)

    {

        this.status = status;

    }

 

    publiclong getTotalSize()

    {

        return totalSize;

    }

 

    publicvoid setTotalSize(long totalSize)

    {

        this.totalSize = totalSize;

    }

 

    publiclong getBytesRead()

    {

        return bytesRead;

    }

 

    publicvoid setBytesRead(long bytesRead)

    {

        this.bytesRead = bytesRead;

    }

 

    publiclong getElapsedTime()

    {

        return elapsedTime;

    }

 

    publicvoid setElapsedTime(long elapsedTime)

    {

        this.elapsedTime = elapsedTime;

    }

 

    publicboolean isInProgress()

    {

        return "progress".equals(status)|| "start".equals(status);

    }

 

    publicint getFileIndex()

    {

        return fileIndex;

    }

 

    publicvoid setFileIndex(int fileIndex)

    {

        this.fileIndex = fileIndex;

    }

}

(6)页面文件

<%@page language="java" contentType="text/html;charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

<title>Insert title here</title>

<scripttype='text/javascript' src='/StrutsFileUpload/dwr/interface/UploadMonitor.js'></script>

<scripttype='text/javascript' src='/StrutsFileUpload/dwr/engine.js'></script>

<scripttype='text/javascript' src='/StrutsFileUpload/dwr/util.js'></script>

<scripttype='text/javascript' src='/StrutsFileUpload/resources/upload.js'> </script>

 

          <style type="text/css">

 

           #progressBar { padding-top:5px; }

           #progressBarBox { width:350px; height: 20px; border: 1px inset; background: #eee;}

           #progressBarBoxContent {width: 0; height: 20px; border-right: 1px solid #444; background:#9ACB34; }

      </style>

</head>

<body>

 

    <h1>文件上传演示</h1><br>

 

    <form action="upload.do" method="post" enctype="multipart/form-data"  onsubmit="startProgress()">

        学生编码:<input type="text"name="code" value="001"><br>

        学生姓名:<input type="text"name="name" value="zhangsan"><br>

        附件1<inputtype="file" name="file1" id="file1"><br>

        附件2<inputtype="file" name="file2" id="file2"><br>

       

       <div id="progressBar"style="display: none">

           <div id="theMeter">

               <div id="progressBarText"></div>

               <div id="progressBarBox">

                   <div id="progressBarBoxContent"></div>

               </div>

           </div>

       </div>

       

       <input type="submit" value="提交" id="uploadbutton">

       <input type="reset">

       

    </form>

 

</body>

</html>

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值