最近在做一個(gè)資源共享的項(xiàng)目中,采用了Struts2.1.8+Spring2.5.6+hibernate3.32的框架整合方式進(jìn)行開(kāi)發(fā)。在文件上傳這塊,因?yàn)樾枰獙?shí)現(xiàn)文件上傳時(shí)顯示進(jìn)度條的功能,所以嘗試了一下。怕以后忘記,先貼出來(lái)分享下。
10多年的蠡縣網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷(xiāo)型網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整蠡縣建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“蠡縣網(wǎng)站設(shè)計(jì)”,“蠡縣網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。要在上傳文件時(shí)能顯示進(jìn)度條,首先需要實(shí)時(shí)的獲知web服務(wù)端接收了多少字節(jié),以及文件總大小,這里我們?cè)陧?yè)面上使用AJAX技術(shù)每一秒向服務(wù)器發(fā)送一次請(qǐng)求來(lái)獲得需要的實(shí)時(shí)上傳信息。但是當(dāng)我們使用struts2后怎么在服務(wù)端獲得實(shí)時(shí)的上傳大小呢?這里需要用到commons-fileupload中的progressListener接口,實(shí)現(xiàn)這個(gè)接口,然后再實(shí)現(xiàn)一個(gè)自己的解析器,并在解析器中添加自己實(shí)現(xiàn)的那個(gè)progressListener;然后再替換struts2自帶的解析器(struts2自帶的解析器類沒(méi)有添加progressListener),然后就可以了。下面看看主要的代碼(技術(shù)有限,如有不對(duì)之處,望不吝點(diǎn)解):
監(jiān)聽(tīng)器:
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.commons.fileupload.ProgressListener; public class ResourceProgressListener implements ProgressListener { private HttpSession session; public ResourceProgressListener(HttpServletRequest request) { session = request.getSession(); ResourceFileUploadStatus newUploadStatus = new ResourceFileUploadStatus(); session.setAttribute("currentUploadStatus", newUploadStatus); } public void update(long readedBytes, long totalBytes, int currentItem) { ResourceFileUploadStatus status = (ResourceFileUploadStatus) session.getAttribute("currentUploadStatus"); status.setReadedBytes(readedBytes); status.setTotalBytes(totalBytes); status.setCurrentItem(currentItem); } }