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

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");

    }

}

 

( 3 dwr.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 >

 

( 4 dwr调用的服务类:

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 "-//W 3C //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>

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值