最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Ajax技術(shù)實(shí)現(xiàn)文件上傳帶進(jìn)度條

 更新時(shí)間:2016年06月16日 15:08:07   作者:柯南&  
這篇文章主要介紹了基于Ajax技術(shù)實(shí)現(xiàn)文件上傳帶進(jìn)度條的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

1.概述

在實(shí)際的Web應(yīng)該開發(fā)或網(wǎng)站開發(fā)過程中,經(jīng)常需要實(shí)現(xiàn)文件上傳的功能。在文件上傳過程中,經(jīng)常需要用戶進(jìn)行長時(shí)間的等待,為了讓用戶及時(shí)了解上傳進(jìn)度,可以在上傳文件的同時(shí),顯示文件的上傳進(jìn)度條。運(yùn)行本實(shí)例,如圖1所示,訪問文件上傳頁面,單擊“瀏覽”按鈕選擇要上傳的文件,注意文件不能超過50MB,否則系統(tǒng)將給出錯(cuò)誤提示。選擇完要上傳的文件后,單擊“提交”按鈕,將會上傳文件并顯示上傳進(jìn)度。

2.技術(shù)要點(diǎn)

主要是應(yīng)用開源的Common-FileUpload組件來實(shí)現(xiàn)分段文件上傳,從而實(shí)現(xiàn)在上傳過程中,不斷獲取上傳進(jìn)度。下面對Common-FileUpload組件進(jìn)行詳細(xì)介紹。

Common-FileUpload組件時(shí)Apache組織下的jakarta-commons項(xiàng)目下的一個(gè)子項(xiàng)目,該組件可以方便地將multipart/form-data類型請求中的各種表單域解析出來。該組件需要另一個(gè)名為Common-IO的組件的支持。這兩個(gè)組件包文件可以到http://commons.apache.org網(wǎng)站上進(jìn)行下載。

(1)創(chuàng)建上傳對象

在應(yīng)該Common-FileUpload組件實(shí)現(xiàn)文件上傳時(shí),需要?jiǎng)?chuàng)建一個(gè)工廠對象,并根據(jù)該工廠對象創(chuàng)建一個(gè)新的文件上傳對象,具體代碼如下:

DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory); 

(2)解析上傳請求

創(chuàng)建一個(gè)文件上傳對象后,就可以應(yīng)用該對象來解析上傳請求,獲取全部的表單項(xiàng),可以通過文件上傳對象的parseRequest()方法來實(shí)現(xiàn)。parseRequest()方法的語法結(jié)構(gòu)如下:

public List parseRequest(HttpServletRequest request) throws FileUploadException 

(3)FileItem類

在Common-FileUpload組件中,無論是文件域還是普通表單域,都當(dāng)成FileItem對象來處理。如果該對象的isFormField()方法返回值為true,則表示是一個(gè)普通表單域,否則為一個(gè)文件域。在實(shí)現(xiàn)文件上傳時(shí),可以通過FileItem類的getName()方法獲得上傳文件的文件名,通過getSize()方法獲得上傳文件的大小。

3.具體實(shí)現(xiàn)

(1)創(chuàng)建request.js文件,在該文件中編寫Ajax請求方法。

(2)新建文件上傳頁index.jsp,在該頁中添加用于獲得上傳文件信息的表單以及表單元素,并添加用于顯示進(jìn)度條的<div>標(biāo)簽和顯示百分比的<span>標(biāo)簽,關(guān)鍵代碼如下:

<form enctype="multipart/form-data" method="post" action="UpLoad?action=uploadFile">

請選擇上傳的文件:<input name="file" type="file" size="34">

注:文件大小請控制在50M以內(nèi)。

<div id="progressBar" class="prog_border" align="left">
<img src="images/progressBar.gif" width="0" height="13" id="imgProgress"></div>
<span id="progressPercent" style="width:40px;display:none">0%</span>
<input name="Submit" type="button" value="提交" onClick="deal(this.form)">
<input name="Reset" type="reset" class="btn_grey" value="重置"></td>
</form> 

(3)新建上傳文件的Servlet實(shí)現(xiàn)類UpLpad。在該類中編寫實(shí)現(xiàn)文件上傳的方法uploadFile(),在該方法中通過Common-FileUpload組件實(shí)現(xiàn)分段上傳文件,并計(jì)算上傳百分比,實(shí)時(shí)保存到Session中,關(guān)鍵代碼如下:

public void uploadFile(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=GBK");
request.setCharacterEncoding("GBK");
HttpSession session=request.getSession();
session.setAttribute("progressBar",0); //定義指定上傳進(jìn)度的Session變量
String error = "";
int maxSize=50*1024*1024; //單個(gè)上傳文件大小的上限
DiskFileItemFactory factory = new DiskFileItemFactory(); //創(chuàng)建工廠對象
ServletFileUpload upload = new ServletFileUpload(factory); //創(chuàng)建一個(gè)新的文件上傳對象
try {
List items = upload.parseRequest(request); // 解析上傳請求
Iterator itr = items.iterator(); // 枚舉方法
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next(); //獲取FileItem對象
if (!item.isFormField()) { // 判斷是否為文件域
if (item.getName() != null && !item.getName().equals("")) {//是否選擇了文件
long upFileSize=item.getSize(); //上傳文件的大小
String fileName=item.getName(); //獲取文件名
if(upFileSize>maxSize){
error="您上傳的文件太大,請選擇不超過50M的文件";
break;
}
// 此時(shí)文件暫存在服務(wù)器的內(nèi)存中
File tempFile = new File(fileName); //構(gòu)造文件目錄臨時(shí)對象
String uploadPath = this.getServletContext().getRealPath("/upload");
File file = new File(uploadPath,tempFile.getName()); 
InputStream is=item.getInputStream();
int buffer=1024; //定義緩沖區(qū)的大小
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; //計(jì)算上傳文件的百分比
fos.write(b,0,length); //向文件輸出流寫讀取的數(shù)據(jù)
session.setAttribute("progressBar",Math.round(percent)); 
}
fos.close();
Thread.sleep(1000); //線程休眠1秒
} else {
error="沒有選擇上傳文件!";
}
}
}
} catch (Exception e) {
e.printStackTrace();
error = "上傳文件出現(xiàn)錯(cuò)誤:" + e.getMessage();
}
if (!"".equals(error)) {
request.setAttribute("error", error);
request.getRequestDispatcher("error.jsp").forward(request, response);
}else {
request.setAttribute("result", "文件上傳成功!");
request.getRequestDispatcher("upFile_deal.jsp").forward(request, response);
}
} 

(4)在文件上傳頁index.jsp中,導(dǎo)入編寫的Ajax請求方法的request.js文件,并編寫獲取上傳進(jìn)度的Ajax請求方法和Ajax回調(diào)函數(shù),關(guān)鍵代碼如下:

<script language="javascript" src="js/request.js"></script>
<script language="javascript">
var request = false;
function getProgress(){ 
var url="showProgress.jsp"; //服務(wù)器地址
var param ="nocache="+new Date().getTime(); //每次請求URL參數(shù)都不同 ,避免上傳時(shí)進(jìn)度條不動(dòng)
request=httpRequest("post",url,true,callbackFunc,param); //調(diào)用請求方法 
}
//Ajax回調(diào)函數(shù)
function callbackFunc(){
if( request.readyState==4 ){ //判斷響應(yīng)是否完成 
if( request.status == 200 ){ //判斷響應(yīng)是否成功
var h = request.responseText; //獲得返回的響應(yīng)數(shù)據(jù),該數(shù)據(jù)位上傳進(jìn)度百分比
h=h.replace(/\s/g,""); //去除字符串中的Unicode空白符
document.getElementById("progressPercent").style.display=""; //顯示百分比 
progressPercent.innerHTML=h+"%"; //顯示完成的百分比
document.getElementById("progressBar").style.display="block"; //顯示進(jìn)度條
document.getElementById("imgProgress").width=h*(235/100); //顯示完成的進(jìn)度
}
}
}
</script> 

(5)編寫showProgress.jsp頁面,在該頁中應(yīng)用EL表達(dá)式輸出保存在session域中的上傳進(jìn)度條的值,具體代碼如下:

<%@page contentType="text/html" pageEncoding="GBK"%>
${progressBar} 

(6)編寫表單提交按鈕onclick事件所調(diào)用的JavaScript方法,在該方法通過window對象的setInterval()方法每隔一定時(shí)間請求一次服務(wù)器,獲得最新的上傳進(jìn)度,關(guān)鍵代碼如下:

function deal(form){
form.submit(); //提交表單
timer=window.setInterval("getProgress()",500); //每隔500毫秒獲取一次上傳進(jìn)度
}

以上所述是小編給大家介紹的基于Ajax技術(shù)實(shí)現(xiàn)文件上傳帶進(jìn)度條的相關(guān)知識,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • JQuery Ajax動(dòng)態(tài)生成Table表格

    JQuery Ajax動(dòng)態(tài)生成Table表格

    實(shí)現(xiàn)過程是這樣的:前臺通過jquery的ajax調(diào)用一般處理程序(Handler),獲取表格需要顯示的信息,然后轉(zhuǎn)換成json格式返回給前臺,前臺獲取到數(shù)據(jù)后循環(huán)構(gòu)建表格的行,最好把行附加到表里。感興趣的朋友一起看看吧
    2015-09-09
  • Ajax傳Jsond Mvc后臺接收實(shí)例

    Ajax傳Jsond Mvc后臺接收實(shí)例

    Ajax傳Jsond Mvc后臺接收,前后臺實(shí)現(xiàn)代碼如下,感興趣的朋友可以參考下哈,希望對大家有所幫助
    2013-06-06
  • 關(guān)于ajax對象一些常用屬性、事件和方法大小寫比較常見的問題總結(jié)

    關(guān)于ajax對象一些常用屬性、事件和方法大小寫比較常見的問題總結(jié)

    最近比較空閑,于是抽個(gè)時(shí)間整理些關(guān)于ajax方法的東東。在項(xiàng)目中經(jīng)常發(fā)現(xiàn)ajax板塊好多問題都是屬性,方法,事件大小寫不區(qū)分問題,最終導(dǎo)致了程序運(yùn)行出現(xiàn)麻煩,下面給大家介紹關(guān)于ajax對象一些常用屬性、事件和方法大小寫比較常見的問題總結(jié)
    2015-10-10
  • AJAX請求以及解決跨域問題詳解

    AJAX請求以及解決跨域問題詳解

    最近開始學(xué)習(xí)ajax,學(xué)習(xí)ajax必須得掌握的就是跨域請求,實(shí)際上在不同源的地址上發(fā)送請求就是跨域請求,下面這篇文章主要給大家介紹了關(guān)于AJAX請求以及解決跨域問題的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 創(chuàng)建ajax對象并兼容多個(gè)瀏覽器

    創(chuàng)建ajax對象并兼容多個(gè)瀏覽器

    這篇文章主要介紹了如何創(chuàng)建ajax對象并兼容多個(gè)瀏覽器,需要的朋友可以參考下
    2014-06-06
  • Ajax異步請求技術(shù)實(shí)例講解

    Ajax異步請求技術(shù)實(shí)例講解

    ajax是一種在無需重新加載整個(gè)網(wǎng)頁的情況下,能夠更新部分網(wǎng)頁的技術(shù)。下面通過本文給大家分享Ajax異步請求技術(shù)實(shí)例講解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧
    2017-08-08
  • ajax文件上傳成功 解決瀏覽器兼容問題

    ajax文件上傳成功 解決瀏覽器兼容問題

    這篇文章主要為大家詳細(xì)介紹了ajax文件上傳的相關(guān)資料,成功解決了瀏覽器兼容問題,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Ajax實(shí)現(xiàn)模擬關(guān)鍵字智能匹配搜索效果

    Ajax實(shí)現(xiàn)模擬關(guān)鍵字智能匹配搜索效果

    這篇文章主要介紹了Ajax實(shí)現(xiàn)模擬關(guān)鍵字智能匹配搜索效果,當(dāng)在搜索框輸入內(nèi)容時(shí),根據(jù)關(guān)鍵字匹配,顯示彈出層,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • Ajax.基礎(chǔ)教程 電子書版 提供下載

    Ajax.基礎(chǔ)教程 電子書版 提供下載

    Ajax.基礎(chǔ)教程 電子書版 提供下載...
    2007-02-02
  • 利用AjaxControlToolkit實(shí)現(xiàn)百度搜索時(shí)的下拉列表提示詳細(xì)步驟

    利用AjaxControlToolkit實(shí)現(xiàn)百度搜索時(shí)的下拉列表提示詳細(xì)步驟

    AjaxControlToolkit是一組控件的集合,可以實(shí)現(xiàn)自動(dòng)補(bǔ)充文本框,點(diǎn)擊文本框彈出日歷,加水印等Ajax效果等等,感興趣的朋友可以了解下啊,或許本文對你學(xué)習(xí)ajax有所幫助
    2013-02-02

最新評論

娄烦县| 巴南区| 新巴尔虎右旗| 于都县| 兰西县| 保德县| 邻水| 丹巴县| 海城市| 蕲春县| 无锡市| 洛宁县| 潜江市| 洛阳市| 尉氏县| 洪雅县| 黎城县| 河北区| 海南省| 林甸县| 嘉义市| 东方市| 黑山县| 会理县| 东海县| 巴里| 澄迈县| 睢宁县| 湟中县| 仙桃市| 栾城县| 栾川县| 安康市| 福州市| 石楼县| 获嘉县| 吐鲁番市| 梁平县| 孝义市| 汨罗市| 昆明市|