`
yaoweinan
  • 浏览: 138359 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

文件上传(无刷新,带进度条,带网速)下载完整

阅读更多

*该程序主要解决带进度,无刷新,带网速计算的上传功能,简单明了,不过是本人愚拙的做法,若有更好的做法介绍介绍

java文件

 

package com.servlet;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.ProgressListener;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

public class Upload extends HttpServlet {
	
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		resp.setContentType("application/xml");
		final PrintWriter out=resp.getWriter();
		XMLOutputter pw=new XMLOutputter(Format.getPrettyFormat().setEncoding("iso-8859-1"));
		Document doc=(Document)req.getSession().getAttribute("msg"+req.getSession().getId())==null?new Document():(Document)req.getSession().getAttribute("msg"+req.getSession().getId());
		pw.output(doc,out);
		System.out.println(req.getSession().getAttribute("msg"+req.getSession().getId()));
	}

	public void doPost(final HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=utf-8");
		final PrintWriter out=response.getWriter();
		ServletFileUpload upload = new ServletFileUpload();
		upload.setSizeMax(100*1024*1024);
		ProgressListener progressListener = new ProgressListener(){
			   long lastBytes=0;
			   long lastTime=System.currentTimeMillis();
			   public void update(long pBytesRead, long pContentLength, int pItems) {
			       if (pContentLength == -1) {
			           System.out.println("So far, " + pBytesRead + " bytes have been read.");
			       } else {
			           long stepByte=(pBytesRead-lastBytes)/1024;
			           String bit="";
			           double stepTime=0f;
			           stepTime=(double) ((System.currentTimeMillis()-lastTime)/1000.0);
			           bit=Math.round(stepByte/stepTime)+"KB/S";
			           Document doc=new Document();
			           Element root=new Element("root");
			           doc.addContent(root);
			           Element file=new Element("file");
			           file.setAttribute("id",pItems+"");
			           file.setAttribute("uploadBytes", pBytesRead+"");
			           file.setAttribute("totalBtyes", pContentLength+"");
			           file.setAttribute("bit", bit);
			           root.addContent(file);
			           request.getSession().setAttribute("msg"+request.getSession().getId(), doc);
			       }
			   }
			};
		upload.setProgressListener(progressListener);
		try {
			FileItemIterator iter = upload.getItemIterator(request);
			while (iter.hasNext()) {
			    FileItemStream item = iter.next();
				InputStream stream = item.openStream();
		    if (item.isFormField()) {
		    } else {
		    	int tmp=item.getName().lastIndexOf("\\")==-1?0:item.getName().lastIndexOf("\\");
		    	if(item.getName().substring(tmp)!=null&&!item.getName().substring(tmp).equals("")){
		    	String fileName="D:\\upload\\"+item.getName().substring(tmp);
		        FileOutputStream tempFile=new FileOutputStream(fileName); 
		        int  buf;
		        while((buf=stream.read())!=-1){
		        	tempFile.write(buf);
		        	tempFile.flush();
		        	}
		        tempFile.close();
		    	}
		    }
		}} catch (FileUploadException e) {
			e.printStackTrace();
		}
		
		
		out.close();
	}
}

 jsp文件

<%@ page language="java" contentType="text/html; charset=gb2312" %>    
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="jquery-1.5.1.min.js"></script>
<title>带进度的文件上传</title>
</head>    
<body>    
<div style="width:500px; margin:0 auto;">
<form action="servlet/Upload" id="form1" name="form1" encType="multipart/form-data"  method="post" target="hidden_frame" onsubmit="checkUpload();">    
    <input type="file" id="file1" name="file1" style="width:450"/>
    <input type="submit" value="上传文件"/>                       
</form>  
</div>  
<iframe name="hidden_frame" id="hidden_frame" style="display: none;"></iframe>
<div  style="width: 500px;height:80px;margin:auto;text-align: center;">
	<div id="msg" style="float: right;"></div>
	<div id="process" style="background-image: url(progress-bg.gif);width: 0px;height: 20px;background-repeat: repeat-x"></div>
	</div>  
</body>    
</html>    
<script type="text/javascript">   
	var startTimer; 
	function checkUpload(){
		 startTimer=setInterval(function(){
		 $.ajax({url: "servlet/Upload?ran="+Math.random(),dataType :"xml",success:callback});
		},1000);
	}
    function callback(msg)    
	{   
	var node=$(msg).find("file");
	var uploadBytes=parseInt(node.attr("uploadBytes"));
	var totalBtyes=parseInt(node.attr("totalBtyes"));
	var bit=node.attr("bit");
	var percentage=Math.round(uploadBytes/totalBtyes*100);
	tmp="已上传"+percentage+"%  网速:"+bit;
	var wid=parseInt(uploadBytes/totalBtyes)*300;
	$("#process").css("width",percentage+"%");  
    $("#msg").html("<font color=red>"+tmp+"</font>");
	if(percentage==100){
			if(startTimer!=null){
				clearInterval(startTimer);
			}
			}
	}
</script>   

 

另外需要jdom.jar 包 和jquery.js

实现无刷新带进度条上传文件(可测网速)

分享到:
评论
2 楼 yaoweinan 2012-07-01  
嘿嘿,那个只是最笨的办法,实际上是不行的,现在一般的都有swf,这个可以实际检测到上传的进度的
1 楼 javazzu 2012-06-28  
我为啥不行呢

相关推荐

    文件上传(无刷新,带进度条,带网速)下载完整 upload

    这个“文件上传(无刷新,带进度条,带网速)下载完整 upload”压缩包提供了一个完整的上传程序示例,非常适合开发者学习和参考。 首先,我们要理解什么是Ajax(Asynchronous JavaScript and XML)。Ajax是一种在不...

    asp Ajax无刷新文件上传(带进度条,无组件)

    为了解决这一问题,ASP(Active Server Pages)结合AJAX(Asynchronous JavaScript and XML)技术,实现了无刷新文件上传,同时还提供了进度条显示,提高了交互性。本文将深入探讨这种技术的实现原理及步骤。 一、...

    ajax + asp无刷新文件图片上传程序(带进度条显示)

    ajax + asp无刷新文件异步上传程序,并有进度条实时显示上传进度!ajax + asp无刷新文件异步上传程序,并有进度条实时显示上传进度!ajax + asp无刷新文件异步上传程序,并有进度条实时显示上传进度!ajax + asp无...

    无刷新带进度条文件上传

    无刷新带进度条文件上传是现代网页应用中常见的一种用户体验优化技术,主要应用于大文件上传或者需要用户实时了解上传进度的场景。这种技术的核心在于利用Ajax异步通信和HTML5的File API,使得用户在上传文件时无需...

    dwr实现无刷新带进度条多文件上传(java版)

    DWR(Direct Web Remoting)是一种Java技术,用于在浏览器和服务器之间实现实时、双向通信,无需页面刷新。...通过分析和运行提供的源码,开发者能够深入掌握DWR实现多文件无刷新上传的核心技术和实现步骤。

    Ajax无刷新文件上传(带进度条)

    在现代Web应用中,"Ajax无刷新文件上传(带进度条)"是一个常见且重要的功能,它极大地提升了用户体验。Ajax(Asynchronous JavaScript and XML)技术使得网页可以在不重新加载整个页面的情况下与服务器交换数据并更新...

    java+jquery文件上传 无刷新 带进度条,监控文件上传情况

    `java+jquery`的文件上传技术结合了后端的Java服务器处理和前端的jQuery库来实现无刷新的用户体验,同时提供上传进度条,实时反馈文件上传状态。本文将详细讲解这个主题。 首先,让我们了解Java文件上传的基础。在...

    JSP批量上传,实现多文件无刷新上传(带有进度条)。

    JSP批量上传,实现多文件无刷新上传(带有进度条)。 程序加了些须的验证,目前只能上传图片。 压缩文件为Eclipse项目文件,直接导入即可使用 预览图片地址: ...注:所有文件保存到项目文件夹下的uplaod文件夹下,...

    非常漂亮ajax 上传无刷新 带进度条源代码

    本资源提供的"非常漂亮ajax 上传无刷新 带进度条源代码"正是利用了Ajax的核心特性,实现了文件上传过程中无刷新的用户体验,并且带有进度条显示,极大地提升了用户交互性和满意度。 首先,让我们了解一下Ajax上传的...

    ajax 无刷新上传文件带进度条

    在现代Web应用中,用户界面的流畅性和交互性至关重要,"Ajax无刷新上传文件带进度条"技术就很好地满足了这一需求。Ajax(Asynchronous JavaScript and XML)是一种创建动态网页的技术,它允许在不重新加载整个页面的...

    asp 无刷新上传 带进度条

    在ASP中实现无刷新上传并带有进度条的功能,可以极大提升用户体验,避免用户在文件上传过程中等待页面刷新,显示实时的上传进度能够让用户知道操作的状态。 首先,我们需要了解这个功能的实现原理。无刷新上传通常...

    HTML5 JS ajax 无刷新上传文件 带进度条

    HTML5、JavaScript(JS)和AJAX技术的结合使得现代网页可以实现无刷新上传文件,同时还能展示上传进度条,极大地提升了用户体验。这种技术在Web应用中被广泛应用,特别是那些需要用户频繁上传文件的场景,如社交媒体...

    ASP无刷新批量上传文件插件 有进度条

    综上所述,"ASP无刷新批量上传文件插件 有进度条"实现了基于Ajax的无刷新文件上传功能,结合JavaScript和ASP技术,为用户提供了一个友好的界面和实时的进度反馈。这不仅提高了上传效率,也提升了用户的使用体验。

    新 ASP无组件上传带进度条 (源码 + 实例)

    ASP无组件上传带进度条是一种在ASP(Active Server Pages)环境下实现文件上传并显示上传进度的技术,无需额外的服务器组件。这种技术对于提高用户体验尤其重要,因为它允许用户在上传大文件时了解进度,减少了用户...

    基于uploadify的无刷新上传 带进度条

    基于Uploadify的无刷新上传技术,结合Ajax和Flash技术,为用户提供了一种直观且高效的文件上传方式,尤其在处理多文件上传时,其优势更加明显。 Uploadify是一款非常流行的JavaScript插件,它利用Flash的特性实现了...

    6种经典的asp上传文件源码+带进度条

    在ASP上传文件带进度条的情况下,通常使用JavaScript或者AJAX技术来实现。客户端发送文件到服务器后,服务器返回已接收文件的部分信息,客户端根据这些信息更新进度条。如果使用Flash,Flash与服务器之间可以通过...

    struts2_uploadify带进度条的多文件上传下载

    总之,这个项目实例为使用Struts2和Uploadify实现带进度条的多文件上传及下载功能提供了一个基础模板,对于学习和实践此类功能的开发者来说是一个有价值的参考。通过深入研究和理解这个项目的代码,可以提升对Struts...

    asp.net 超大文件上传,带进度条源码,亲测能用

    综上所述,实现ASP.NET中的大文件上传并带有进度条功能,涉及到的技术点广泛,包括文件分块、合并、进度条UI、错误处理、安全控制等。理解这些知识点并能够灵活应用,对于开发高效且用户体验良好的文件上传系统至关...

    文件上传 带进度条 非常漂亮!

    #### 标题解析:“文件上传 带进度条 非常漂亮!” 标题强调了文件上传功能的一个关键特性——带有美观进度条的上传机制。这表明在进行文件传输时,用户能够直观地看到上传的进度,提供了一个更友好、更互动的用户...

    带进度条的文件上传下载组件(JAVA)

    这个名为“带进度条的文件上传下载组件(JAVA)”的项目,显然聚焦于提供一个用户友好的交互体验,通过显示进度条来增强用户体验,使用户能够清晰地看到文件上传或下载的进度。下面我们将深入探讨这一组件涉及的主要...

Global site tag (gtag.js) - Google Analytics