web上传进度条案例

在项目开发中,上传功能特别常见,那么今天我们就一起讨论制作一个简单的带有进度条的简单案例。
1.首先我们配置web.xml中servlet配置。
t
1.编写jsp页面
2.写我们的servlet
public class UploadServlet extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("text/html;charset=UTF-8");
  PrintWriter out = response.getWriter();
  HttpSession session = request.getSession();
  
  String status = (String)session.getAttribute("progress");
  out.println(status);
  session.removeAttribute("progress");
 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("text/html;charset=UTF-8");
  PrintWriter out = response.getWriter();
  DiskFileItemFactory factory = new DiskFileItemFactory();
  ServletFileUpload upload = new ServletFileUpload(factory);
  upload.setProgressListener(new MyProgressListener(request));
  try{
   List<FileItem> items = upload.parseRequest(request);
   for(FileItem item:items){
    if(!item.isFormField()){
     String fileName = getFileName(item);
     String storePath = getServletContext().getRealPath("/files");
     item.write(new File(storePath,fileName));
    }
   }
   out.println("<script type='text/javascript'>alert('上传成功!');history.back();</script>");
  }catch(Exception e){
   throw new RuntimeException(e);
  }
 }
 //获取上传文件的文件名
 public String getFileName(FileItem item){
  String fileName = item.getName();
  System.out.println("上传的文件名是:"+fileName);
  int lastIndex = fileName.lastIndexOf("\\");
  fileName = fileName.substring(lastIndex+1);
  System.out.println("截取的文件名是:"+fileName);
  return fileName;
 }
}
3.编写监听器
public class MyProgressListener implements ProgressListener {
 private double megaBytes = -1;//兆字节
 private HttpSession session;
 public MyProgressListener(HttpServletRequest request){
  session = request.getSession();
 }
 public void update(long pBytesRead, long pContentLength, int pItems) {
  double mBytes = pBytesRead/1000000;//已读取的字节数转换为M字节
  double total = pContentLength/1000000;//上传文件的大小转化为M字节
  if(megaBytes == mBytes)
   return;
  System.out.println("total===>"+total);
  System.out.println("mBytes===>"+mBytes);
  megaBytes = mBytes;
  System.out.println("megaBytes===>"+megaBytes);
   double read = (mBytes/total);
   NumberFormat nf = NumberFormat.getPercentInstance();
   session.setAttribute("progress", nf.format(read));//把百分比存到session中
  }
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值