您的位置:首页 > 其它

Common-FileUpload带进度条上传

2013-06-03 14:28 330 查看
下载地址:http://download.csdn.net/detail/guoxuepeng123/5507987

所需Jar包:commons-fileupload.jar  commons-io.jar

页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">

<script type="text/javascript" src="<%=basePath%>/js/jquery-1.4.4.min.js"></script>
<style type="text/css">
iframe{
border:none;
width:0;
height:0;
}
#progress{
display:none;
}
#p_out{
width:300px;
height:12px;
margin:10px 0 0 0;
padding:1px;
font-size:10px;
border:solid #6b8e23 1px;
}
#p_in{
width:0%;
height:100%;
background-color:#6b8e23;
margin:0;
padding:0;
}
#dis{
margin:0;
padding:0;
text-align:center;
font-size:12px;
height:12px;
width:300px;
}
</style>
<script type="text/javascript">
var inter = null;
function formSubmit(){
$("#progress").show();
inter = window.setInterval("callback();", 100);//每隔100毫秒执行callback
document.getElementById('dis').innerHTML = "初始化数据...";
document.getElementById('p_in').style.width = "0%";
document.form.submit();
}
function callback(){
$.ajax({
url: "<%=basePath%>/uploadStatus",
type: "POST",
async:false,
data: {
},
error:function(errorMsg){
},
success: function(data){
document.getElementById('dis').innerHTML = '已上传:'+data;
document.getElementById('p_in').style.width = data;
if(data.indexOf("100%")!=-1){
uploadSuccess();
}
}
});
}
function uploadSuccess(){
clearInterval(inter);
document.getElementById('dis').innerHTML = "上传成功!";
document.getElementById('p_in').style.width = "100%";
}
</script>

</head>

<body>
<form action="<%=basePath%>/upload" method="post" enctype="multipart/form-data" target="progress_iframe" name="form" >
<input type="file" name="file" ><input type="button" onclick="formSubmit();" value="提交">
</form>
<iframe frameborder="0" id="progress_iframe" name="progress_iframe" src="javascript:void(0)"></iframe>
<div id="progress">
<div id="p_out"><div id="p_in">
</div></div>
<div id="dis"></div>
</div>
</body>
</html>


Servlet

文件上传处理Servlet UploadServlet.java

package com.fileupload.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;

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

import org.apache.commons.fileupload.FileItem;

import com.fileupload.entity.FileUpload;

public class UploadServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
String key = Integer.toString(request.hashCode());
request.getSession().setAttribute("key", key);
PrintWriter out = response.getWriter();
FileUpload fu=new FileUpload();
fu.setMap(request,key);//解析request
Map<String,FileItem> files=fu.getFiles();
String fileName =fu.getFileName(files.get("file"));
File file=new File(this.getServletContext().getRealPath("upload\\"+fileName));
try {
files.get("file").write(file);

} catch (Exception e) {
e.printStackTrace();
}
out.println("<script>parent.uploadSuccess();</script>");
}

}


实时获取上传状态Servlet UploadStatusServlet.java

package com.fileupload.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

public class UploadStatusServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
HttpSession session=request.getSession();
String key = (String) request.getSession().getAttribute("key");
String status=(String) session.getAttribute(key);//获取上传进度百分比
out.println(status);//响应
}

}


文件上传进度信息类 Progress.java

package com.fileupload.entity;

import java.text.NumberFormat;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.ProgressListener;
/**
* 上传文件进度信息
*
*/
public class Progress implements ProgressListener {

private HttpSession session;

private long length = 0;

private long currentLength = 0;

private boolean isComplete = false;

private double megaBytes = -1;

private String key;

public Progress(HttpServletRequest request,String key) {
session = request.getSession();
this.key = key;
}

public void update(long pBytesRead, long pContentLength, int items) {
this.currentLength = pBytesRead;
double mBytes = pBytesRead / 1000000;
double total=pContentLength/1000000;
if (megaBytes == mBytes) {
return;
}
//           System.out.println("total====>"+total);
//           System.out.println("mBytes====>"+mBytes);
megaBytes = mBytes;
//           System.out.println("megaBytes====>"+megaBytes);
//           System.out.println("We are currently reading item " + items);
if (pContentLength == -1) {
//               System.out.println("So far, " + pBytesRead + " bytes have been read.");
} else {
//               System.out.println("So far, " + pBytesRead + " of " + pContentLength
//                                  + " bytes have been read.");
double read=(mBytes/total);
NumberFormat nf=NumberFormat.getPercentInstance();
//              System.out.println("read===>"+nf.format(read));//生成读取的百分比 并放入session中
session.setAttribute(key, nf.format(read));
}
}

public long getLength() {
return length;
}

public long getCurrentLength() {
return currentLength;
}

public boolean isComplete() {
return isComplete;
}

public void setLength(long length) {
this.length = length;
}

public void setCurrentLength(long currentLength) {
this.currentLength = currentLength;
}

public void setComplete(boolean isComplete) {
this.isComplete = isComplete;
}
}


文件上传封装类  FileUpload.java

package com.fileupload.entity;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class FileUpload {
private Map<String,String> params;
private Map<String,FileItem> files;

public FileUpload() {
params=new HashMap<String, String>();
files=new HashMap<String, FileItem>();
}

public void setMap(HttpServletRequest request,String key){
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("utf-8");
upload.setProgressListener(new Progress(request,key));//设置进度监听器
try {
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
params.put(name, value);
}
else{
String name=item.getFieldName();
files.put(name, item);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}

public Map<String, String> getParams() {
return params;
}

public Map<String, FileItem> getFiles() {
return files;
}
//用来获取文件的名字
public String getFileName(FileItem item){
String fName=item.getName();
int lastIndex=fName.lastIndexOf("\\");
fName=fName.substring(lastIndex+1);
return fName;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: