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=& ...
随机推荐
- Jenkins构建自动化脚本执行无界面解决方法
场景: jenkins构建selenium自动化用例的时候,会有jenkins自带服务后台运行自动化脚本,可无界面运行IE.Chrome.Firefox. 然而运行IE浏览器时候(IE比较特殊),Je ...
- Oracle数据安全解决方案(1)——透明数据加密TDE
Oracle数据安全解决方案(1)——透明数据加密TDE2009年09月23日 22:49:00 华仔爱技术 阅读数:7991原文地址: http://www.oracle.com/technolog ...
- linux deepin 无线网卡不能用,打不开
今天安装了NVIDIA的大黄蜂驱动,重启,开机,无线网打不开了, (后来又看到蓝牙功能没了,忙碌中知道了wifi和蓝牙是在一起的,一损俱损!) 折腾了一下午 首先,我上deepin官网找了一圈,没解决 ...
- TypeError: can only concatenate str (not "int") to str解决方式
使用format函数解决问题 for page in range(1,pagebox+1): url = "https://www.dd373.com/s/rbg22w-x9kjbs-wwf ...
- spring MVC 项目 WEB-INF下的jsp不能加载css文件
一.项目目录 二.解决方法(已解决) 1. jsp文件加入 <link href="<c:url value="/css/main.css" />&qu ...
- .net基础学java系列(五)慢性自杀 之 沉沦在IDE中
最近在慢学习IDEA,总是喜欢与Visual Studio! 其实,对于Visual Studio,它的官方(https://docs.microsoft.com/zh-cn/visualstudio ...
- C# FTP下载图片转为Base64
public string GetFtpBase64String(string FtpFilePath) { try { string sBase64String = string.Empty; Ft ...
- Java 自定义注释@interface的用法
最简单的待校验的注解定义 @Documented @Constraint(validatedBy = ExistBlankByListValidator.class) @Target({PARAMET ...
- js原型与原型链探究
原型有一个非常重要的属性叫 prototype 一.先写一个简单的例子,看看 A的原型和A的实例 分别是什么 function A() {} var a = new A() console.log(a ...
- Very Long Suffix Array
题解: 原来动态开点平衡树是O(n)空间的.. 只需要在split的查找和出来之后动态开点就可以了 这题的结论是2^(b[a[i]+1]>b[a[i+1]+1]的个数) 前60分是普通的平衡树操 ...