精品专区-精品自拍9-精品自拍三级乱伦-精品自拍视频-精品自拍视频曝光-精品自拍小视频

網站建設資訊

NEWS

網站建設資訊

Ajax中怎么實現文件上傳帶進度條

這篇文章將為大家詳細講解有關Ajax中怎么實現文件上傳帶進度條,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

目前成都創新互聯公司已為成百上千的企業提供了網站建設、域名、虛擬主機綿陽服務器托管、企業網站設計、廣安網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協力一起成長,共同發展。

(1)創建上傳對象

在應該Common-FileUpload組件實現文件上傳時,需要創建一個工廠對象,并根據該工廠對象創建一個新的文件上傳對象,具體代碼如下:

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

(2)解析上傳請求

創建一個文件上傳對象后,就可以應用該對象來解析上傳請求,獲取全部的表單項,可以通過文件上傳對象的parseRequest()方法來實現。parseRequest()方法的語法結構如下:

public List parseRequest(HttpServletRequest request) throws FileUploadException

(3)FileItem類

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

3.具體實現

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

(2)新建文件上傳頁index.jsp,在該頁中添加用于獲得上傳文件信息的表單以及表單元素,并添加用于顯示進度條的

標簽和顯示百分比的標簽,關鍵代碼如下:

請選擇上傳的文件:

注:文件大小請控制在50M以內。


0%

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

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); //定義指定上傳進度的Session變量
String error = "";
int maxSize=50*1024*1024; //單個上傳文件大小的上限
DiskFileItemFactory factory = new DiskFileItemFactory(); //創建工廠對象
ServletFileUpload upload = new ServletFileUpload(factory); //創建一個新的文件上傳對象
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;
}
// 此時文件暫存在服務器的內存中
File tempFile = new File(fileName); //構造文件目錄臨時對象
String uploadPath = this.getServletContext().getRealPath("/upload");
File file = new File(uploadPath,tempFile.getName()); 
InputStream is=item.getInputStream();
int buffer=1024; //定義緩沖區的大小
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); //向文件輸出流寫讀取的數據
session.setAttribute("progressBar",Math.round(percent)); 
}
fos.close();
Thread.sleep(1000); //線程休眠1秒
} else {
error="沒有選擇上傳文件!";
}
}
}
} catch (Exception e) {
e.printStackTrace();
error = "上傳文件出現錯誤:" + 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中,導入編寫的Ajax請求方法的request.js文件,并編寫獲取上傳進度的Ajax請求方法和Ajax回調函數,關鍵代碼如下:



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

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

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

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

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

關于Ajax中怎么實現文件上傳帶進度條就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


網頁題目:Ajax中怎么實現文件上傳帶進度條
文章地址:http://m.jcarcd.cn/article/gcppdh.html
主站蜘蛛池模板: 日韩午夜电影网 | 日本护士毛茸茸xx | 日韩经典欧美 | 无码精品国产第一区二区 | 乱子对白 | 国产精成人品 | 国产美女嘘嘘嘘嘘嘘 | 日本人乱亲伦视频 | 日韩国产精品区 | 91社区免费福利区 | 国产一区二区在线 | 欧美日韩国产在线 | 成人国产免费 | 国产妇女视频免费 | 欧美三级在线播放 | 成人国产在线 | 国产日韩欧美中文 | 国产激情视频四区 | 精品国产综合色在线 | 日韩激情视频在线 | 天美麻花视频大全 | 九九综合黑白配久 | 国产成年人视 | 不卡午夜| 日韩一区二区 | 国产高清在线免 | 日韩成人免费电影 | 日韩在线看片 | 欧美日韩高清不卡 | 97視频| 日韩中文在线播放 | 日本中文字幕乱码a | 精品二区 | 午夜福利免费体验区 | 国产精品一区二区亚 | 日韩a午| 国产太嫩了在 | 三年片免费观看大全 | 娇妻羞涩交换 | 九一果冻制作厂在线 | 国产欧美日韩在线一 |