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=& ...
随机推荐
- VUE项目快速构建
IDE :VScode 1.新建项目文件夹 ctrl+~ 调出命令板,/IDE找到当前文件夹右键 点击‘在命令提示符中打开’ 安装 node:官网(https://nodejs.org/en/d ...
- 启动Eclipse发生错误:An internal error occurred during: "Initializing Java Tooling".
问题描述 由于上一次关闭 Eclipse 时没有正常关闭,再次启动 Eclipse 时报错:An internal error occurred during: "Initializin ...
- python——Pycharm的简单介绍
一.什么是Pycharm? Pycharm是一种python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自 ...
- appium 与 selenium python解决python 'WebElement' object does not support indexing 报错问题问题
再用selenium编写测试脚本时,发现出现python 'WebElement' object does not support indexing 报错问题问题,再找一些解决方法时,发现Appium ...
- mysql explain结果含义
在SQL语句前面加上EXPLAIN即可 各字段含义 id SELECT识别符.这是SELECT的查询序列号 select_type SELECT类型,可以为以下任何一种: SIMPLE:简单SELEC ...
- 解决ODBC连接Oracle数据库报Unable to connect SQLState=08004问题
今天用ODBC连接Oracle数据库时,报了这么一个错“Unable to connect SQLState=08004 Oracle ODBC Ora-12154”,上网查了好久都说PowerDes ...
- 使用Anaconda操作numpy库和matplotlib图形库
慢慢来~~~ import numpy as np import matplotlib.pyplot as plt # 生成数据 x = np.arange(0, 6, 0.1) # 以0.1为单位, ...
- SoftEther
sudo apt-get update sudo wget http://www.softether-download.com/files/softether/v4.25-9656-rtm-201 ...
- Intellij IDEA 从数据库生成 JPA Entity
首先,需要从调用 Database 窗口 View>Tool Windows>Database 添加到数据库的连接 选择数据的表,然后右击 选择 Scripted Extensions & ...
- python 对任意文件(jpg,png,mp3,mp4)base64的编码解码
程序是事件驱动的,写博客是什么驱动的?事件? 时间?no,我承认我很懒,甚至不愿意记录总结.哪是什么驱动的? 对! 问题驱动的.遇到了问题解决了问题突然想起来搬到blog上,让遇到相同问题的可以参考下 ...