php上传进度条实例,基于fileUpload文件上传带进度条效果的实例

下面我就为大家带来一篇基于fileUpload文件上传带进度条效果的实例。现在就分享给大家,也给大家做个参考。

文件上传过程中,如果我们能看到进度条会更好,实现思路是服务器端用监听器实时监听进度并存入session,客户端异步请求服务器端获得上传进度,并进行效果渲染。

效果图:

221660d28eec6cf8928ded475ef31567.gif

服务器端servlet:public class UploadServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//取出监听器MyProgress在session中保存的进度信息

String progress=(String) req.getSession().getAttribute("progress");

//响应

resp.getWriter().print(progress);

//清除session中保存的数据

// req.getSession().removeAttribute("progress");

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

req.setCharacterEncoding("UTF-8");

DiskFileItemFactory factory=new DiskFileItemFactory();

ServletFileUpload upload=new ServletFileUpload(factory);

upload.setProgressListener(new MyProgressListener(req));

try {

List list = upload.parseRequest(req);

for (FileItem fileItem : list) {

if (fileItem.isFormField()) {//普通表单

}else{//上传文件

String path=req.getRealPath("uploads");

String fileName=fileItem.getName();

File file=new File(path, fileName);

fileItem.write(file);

System.out.println("成功上传文件:"+fileName);

}

}

} catch (Exception e) {

System.out.println("文件上传发生错误!");

e.printStackTrace();

}

}

}

服务器端监听器:public class MyProgressListener implements ProgressListener {

private HttpSession session;

public MyProgressListener(HttpServletRequest request){

session = request.getSession();

}

@Override

public void update(long pBytesRead, long pContentLength, int pItems) {

//将数据进行格式化

//已读取数据由字节转换为M

double readM=pBytesRead/1024.0/1024.0;

//已读取数据由字节转换为M

double totalM=pContentLength/1024.0/1024.0;

//已读取百分百

double percent=readM/totalM;

//格式化数据

//已读取

String readf=dataFormat(pBytesRead);

//总大小

String totalf=dataFormat(pContentLength);

//进度百分百

NumberFormat format=NumberFormat.getPercentInstance();

String progress=format.format(percent);

//将信息存入session

session.setAttribute("progress", progress);

//打印消息到控制台

System.out.println("pBytesRead===>"+pBytesRead);

System.out.println("pContentLength==>"+pContentLength);

System.out.println("pItems===>"+pItems);

System.out.println("readf--->"+readf);

System.out.println("totalf--->"+totalf);

System.out.println("progress--->"+progress);

}

/**

* 格式化读取数据的显示

* @param data要格式化的数据 单位byte

* @return 格式化后的数据,如果小于1M显示单位为KB,如果大于1M显示单位为M

*/

public String dataFormat(double data){

String formdata="";

if (data>=1024*1024) {//大于等于1M

formdata=Double.toString(data/1024/1024)+"M";

}else if(data>=1024){//大于等于1KB

formdata=Double.toString(data/1024)+"KB";

}else{//小于1KB

formdata=Double.toString(data)+"byte";

}

return formdata.substring(0, formdata.indexOf(".")+2);

}

}

客户端:

带进度条的文件上传效果

#progressBar{width: 300px;height: 20px;border: 1px #EEE solid;}

#progress{width: 0%;height: 20px;background-color: lime;}

function upload(){

$("#f1").submit();

var pro=null;

pro=setInterval(function(){

$.get("UploadServlet","",function(data){

if(data=='100%'){

clearInterval(pro);

$("#proInfo").text("上传进度:100%");

//更新进度条

$("#progress").width("100%");

}else{//正在上传

//更新进度信息

$("#proInfo").text("上传进度:"+data);

//更新进度条

$("#progress").width(data);

}

});

},200);

}

带进度条的文件上传效果

文件:

上传进度:0%

说明:为了让上传后该页面不跳转,我们可以让表单跳转至一个隐藏的iframe。

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值