Ajax实现带进度条的文件上传
Ajax实现带进度条的文件上传
文件上传页面运行效果

上传文件并显示进度条运行效果

代码如下;
DiskFileItemFactory factory = new DiskFileItemFactory(); //?ùóú′???????????′′?¨????1¤3§???ó
ServletFileUpload upload = new ServletFileUpload(factory); //′′?¨??????μ?????é?′????ó
public List parseRequest(HttpServletRequst request) throws FileUploadException
request£oHttpServletRequest???ó?£
List items = upload.parseRequest(request); // ?a??é?′????ó
public boolean isFormField()
if (!item.isFormField()) {// ????ê?·??a????ó?
?- //′?′|ê???á?2?·?′ú??
}
public String getName();
String fileName=item.getName(); //??è???????
public long getSize()
long upFileSize=item.getSize(); //é?′?????μ?′ó??
int read(byt[] b)
b£oó?óú???¨????×??úê?×é?£
byte[] b=new byte[buffer];
while((length=is.read(b))!=-1){
void write(byte[] b,int off, int len)
b£oó?óú???¨′ó????×??úê?×é?′è?ê????£
off£oó?óú???¨ê???bμ?????????á?£?′ó???????aê?μ?×??ú?á±??′è?á÷???£
len£oó?óú???¨?a?′è?μ?×??úê??£
fos.write(b,0,length); //??????ê?3?á÷?′?áè?μ?ê???
<div id="progressBar" class="prog_border" align="left">
<img src="data:images/progressBar.gif" width="0" height="13" id="imgProgress">
</div>
<span id="progressPercent" style="width:40px;display:none">0%</span>
.prog_border {
height: 15px; /*???è*/
width: 205px; /*?í?è*/
background: #FFFFFF; /*±3?°??é?*/
border: 1px solid #000; /*±????ùê?*/
margin: 0;
padding: 0;
display:none; /*2???ê?*/
position:relative;
left:55px;
float:left; /*?ó×ó????*/
}
function deal(form){
form.submit(); //?á??±íμ¥
timer=window.setInterval("getProgress()",500); //????500oá????è???′?é?′????è
}
public void uploadFile(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
HttpSession session=request.getSession();
session.setAttribute("progressBar",0); //?¨?????¨é?′????èμ?Session±?á?
String error = "";
int maxSize=50*1024*1024; //μ¥??é?′?????′ó??μ?é???
DiskFileItemFactory factory = new DiskFileItemFactory(); //?ùóú′???????????′′?¨????1¤3§???ó
ServletFileUpload upload = new ServletFileUpload(factory); //′′?¨??????μ?????é?′????ó
try {
List items = upload.parseRequest(request); // ?a??é?′????ó
Iterator itr = items.iterator();// ???ù·?·¨
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next(); //??è?FileItem???ó
if (!item.isFormField()) {// ????ê?·??a????
if (item.getName() != null && !item.getName().equals("")) { // ????ê?·?????á?????
long upFileSize=item.getSize(); //é?′?????μ?′ó??
String fileName=item.getName(); //??è???????
if(upFileSize>maxSize){
error="?úé?′?μ???????′ó£???????2?3?1?50Mμ?????";
break;
}
// ′?ê±??????′??ú·????÷μ??ú′???
File tempFile = new File(fileName); // 11??áùê±???ó
//??è??ù??????ó|μ???êμ??àí?·??
File file = new File(request.getRealPath("/upload"),tempFile.getName());
InputStream is=item.getInputStream();
int buffer=1024; //?¨???o3???μ?′ó??
int length=0;
byte[] b=new byte[buffer];
double percent=0;
FileOutputStream fos=new FileOutputStream(file);
while((length=is.read(b))!=-1){
percent+=length/(double)upFileSize*100D; //????é?′?????μ?°ù·?±è
fos.write(b,0,length); //??????ê?3?á÷?′?áè?μ?ê???
//??é?′?°ù·?±è±£′?μ?Session??
session.setAttribute("progressBar",Math.round(percent));
}
Thread.sleep(1000); //??3?????1??
} else {
error="??ó?????é?′?????£?";
}
}
}
} catch (Exception e) {
e.printStackTrace();
error = "é?′?????3???′í?ó£o" + e.getMessage();
}
if (!"".equals(error)) {
request.setAttribute("error", error);
request.getRequestDispatcher("error.jsp").forward(request, response);
}else {
request.setAttribute("result", "????é?′?3é1|£?");
request.getRequestDispatcher("upFile_deal.jsp").forward(request, response);
}
}
<script language="javascript" src="JS/AjaxRequest.js"></script>
function getProgress(){
var loader=new net.AjaxRequest("showProgress.jsp?nocache="+new Date().getTime(),deal_p,onerror,"GET");
}
<%@page contentType="text/html" pageEncoding="UTF-8"%>
${progressBar}
function deal_p(){
var h=this.req.responseText; //??è?íê3éμ?°ù·?±è
h=h.replace(/\s/g,""); //è¥3?×?·?′???μ?Unicode??°×·?
document.getElementById("progressPercent").style.display=""; //??ê?°ù·?±è
progressPercent.innerHTML=h+"%"; //??ê?íê3éμ?°ù·?±è
document.getElementById("progressBar").style.display="block"; //??ê????è??
document.getElementById("imgProgress").width=h*(205/100); //??ê?íê3éμ????è
}
function onerror(){
alert("3?′íá?");
}
Ajax实现带进度条的文件上传的更多相关文章
- Ajax技术——带进度条的文件上传
1.概述 在实际的Web应该开发或网站开发过程中,经常需要实现文件上传的功能.在文件上传过程中,经常需要用户进行长时间的等待,为了让用户及时了解上传进度,可以在上传文件的同时,显示文件的上传进度条.运 ...
- Android带进度条的文件上传,使用AsyncTask异步任务
最近项目中要做一个带进度条的上传文件的功能,学习了AsyncTask,使用起来比较方便,将几个方法实现就行,另外做了一个很简单的demo,希望能对大家有帮助,在程序中设好文件路径和服务器IP即可. A ...
- 采用formdata做跨域的、无刷新、带进度条的文件上传
以前做无刷新上传,都要用iframe,如果想有进度条,就千难万难,不得不用flash等插件来实现. 现在HTML5终于普及了,筒子们不用再那么痛苦了. 所有这一切都变得异常简单!! 不信?且看如下代码 ...
- HTML5利用FormData对象实现显示进度条的文件上传
摘自:https://blog.csdn.net/q1056843325/article/details/53759963 自己做是按这个实现的,兼容性还不错 完整简约的解决方案 下面的代码清单是包括 ...
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
- 带进度条的文件批量上传插件uploadify
有时项目中需要一个文件批量上传功能时,个人认为uploadify是快速简便的解决方案. 先上效果图: 一. 下载uploadify 从官网下载uploadify的Flash版本(Flash版本免费,另 ...
- 初识html5 File API实现带有进度提示的文件上传
Html5终于解决了上传文件的同时显示文件上传进度的老问题.现在大部分的网站用Flash去实现这一功能,还有一些网站继续采用Html <form>with enctype=multipar ...
- WebApi实现Ajax模拟Multipart/form-data方式多文件上传
前端页面代码: <input type="file" class="file_control" /><br /> <input t ...
- 基于mvc三层架构和ajax技术实现最简单的文件上传
前台页面提交文件 <!DOCTYPE html> <html><head> <meta name="viewport" content=& ...
随机推荐
- Jquery验证码倒计时
html代码: <input type="button" value="获取验证码" id="getCode" style=" ...
- RandomShuffleQueue
一.几个函数 RandomShuffleQueue类 __init__(self, capacity, min_after_dequeue,dtypes, shapes=None,names=None ...
- MySQL 慢查询日志分析工具(pt-query-digest)
1. 慢查询命令: 是否开启和日志路径:show variables like '%slow_query_log%'; 最大查询时间:show variables like '%query_time% ...
- centos7手把手教你搭建zabbix监控
Centos7安装部署zabbix3.4 centos系统版本: 1.安装前需要先关闭selinux和firewall. 1.1 [root@zabbix ~]# vi /etc/selinux/co ...
- 在做zabbix分布式监控时遇到的各种坑
因为公司在用zabbix的时候需要用到zabbix-proxy,所以今天就在三台虚拟机上做了测试: 环境:zabbix-server端:centos6.8 上面安装了zabbix-server.zab ...
- Topshelf的使用
一.简介 Topshelf可用于创建和管理Windows服务.其优势在于不需要创建windows服务,创建控制台程序就可以.便于调试. 二.官方地址: 1.官网:http://topshelf-pro ...
- Linux密码重置
在启动菜单选择启动内核: 按e编辑,编辑修改两处:ro改为rw,和找到rhgb quiet一行: 把rhgb quiet替换为init=/bin/bash(临时生效): 按CTRL+X进入单用户模式: ...
- java的this关键字理解
1.java提供了一个this关键字,this关键字总是指向调用该方法的对象.根据this出现位置的不同,this作为对象的默认引用有两种情形.a).构造器中引用该构造器正在初始化的对象.(this总 ...
- ansible字符串处理(一)
[root@node-1 test]# ansible-playbook hba_card_check.yml PLAY [compute[0]] ************************** ...
- C#生成COM组件
1.类库代码 1.1暴露的方法必须以接口的方式实现 1.2类需要GUID编号 using System; using System.Runtime.InteropServices; //COM组件 n ...