溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

WebWork中怎么實(shí)現(xiàn)文件上傳功能

發(fā)布時(shí)間:2021-08-06 15:25:51 來(lái)源:億速云 閱讀:155 作者:Leah 欄目:編程語(yǔ)言

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)WebWork中怎么實(shí)現(xiàn)文件上傳功能,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

Webwork文件上傳看了很多的文章收獲不少,目前比較簡(jiǎn)單的方式是通過(guò)webwork提供的FileUploadInterceptor來(lái)實(shí)現(xiàn)Webwork文件上傳,這個(gè)攔截器在使用的時(shí)候是非常方便的,通過(guò)這個(gè)攔截器可以自動(dòng)獲得上傳文件的文件名、文件類(lèi)型、文件三個(gè)部分。然后用戶可以再進(jìn)行后續(xù)的處理,包括將文件信息存入數(shù)據(jù)庫(kù)、移動(dòng)文件到制定的文件夾等。

對(duì)于這個(gè)攔截器的工作原理大致是這樣的,用戶執(zhí)行Action的時(shí)候,攔截器構(gòu)造request:

java 代碼

HttpServletRequest request = (HttpServletRequest)   ac.get(ServletActionContext.HTTP_REQUEST);

然后判斷request是否是MultiPartRequestWrapper的一個(gè)實(shí)例,接下來(lái)初始化MultiPartRequestWrapper:

java 代碼

MultiPartRequestWrapper multiWrapper =   (MultiPartRequestWrapper) request;

這里就通過(guò)判斷用戶在webwork.properties中定義Webwork文件上傳類(lèi)型來(lái)構(gòu)造MultiPartRequestWrapper,

java 代碼

String parser = Configuration.getString  (WebWorkConstants.WEBWORK_MULTIPART_PARSER);      // If it's not set, use Jakarta      if (parser.equals("")) {      log.warn("Property webwork.multipart.parser not set." +      " Using com.opensymphony.webwork.dispatcher.  multipart.JakartaMultiPartRequest");      parser = "com.opensymphony.webwork.dispatcher.  multipart.JakartaMultiPartRequest";      }      // legacy support for old style property values      else if (parser.equals("pell")) {      parser = "com.opensymphony.webwork.dispatcher.  multipart.PellMultiPartRequest";      } else if (parser.equals("cos")) {      parser = "com.opensymphony.webwork.dispatcher.  multipart.CosMultiPartRequest";      } else if (parser.equals("jakarta")) {      parser = "com.opensymphony.webwork.dispatcher.  multipart.JakartaMultiPartRequest";      }

假設(shè)用戶定義了jakarta,這時(shí)候就通過(guò)JakartaMultiPartRequestMonitor來(lái)實(shí)現(xiàn)Webwork文件上傳(通過(guò)common-fileupload),同時(shí)獲得文件的名稱和類(lèi)型等信息。

對(duì)于文件上傳進(jìn)度條,網(wǎng)上提供了一種給予servlet的解決辦法,這種方式可以很方便的使用在Struts模式下的mvc架構(gòu)的程序中,其中用到的類(lèi)包可以在http://www.telio.be/blog/wp-content/uploads/2006/01/上找到,這種方式的實(shí)質(zhì)是用到了dwr的回調(diào)方式。servlet的上傳方式是通過(guò)下面的方式實(shí)現(xiàn)的:

java 代碼

ServletFileUpload upload =   new ServletFileUpload(factory);      upload.parseRequest(servletRequest);

而進(jìn)度條是通過(guò)實(shí)現(xiàn)一個(gè)factory,來(lái)實(shí)現(xiàn)上傳狀態(tài)的回調(diào)。

webwork的攔截器實(shí)際已經(jīng)將上傳文件到臨時(shí)目錄封裝在內(nèi)部的類(lèi)中,這樣我們就無(wú)法構(gòu)造factory來(lái)實(shí)現(xiàn)進(jìn)度條的監(jiān)控,給予以上的考慮,想了一個(gè)比較笨的辦法,將MultiPartRequestWrapper修改一下,增加一個(gè)新的屬性定義:

java 代碼

else if (parser.equals("monitor"))   {      parser = "com.opensymphony.webwork.  dispatcher.multipart.JakartaMultiPartRequestMonitor";     }

這樣用戶可以在webwork.properties中設(shè)置上傳的模式為monitor,然后自己實(shí)現(xiàn)一個(gè)JakartaMultiPartRequestMonitor,在這個(gè)class中,將原有的factory實(shí)現(xiàn)方法通過(guò)帶進(jìn)度條的方式來(lái)實(shí)現(xiàn),這樣就能監(jiān)控到servlet上傳的進(jìn)度?;镜膶?shí)現(xiàn)思路就是這樣的。下面將幾個(gè)配置過(guò)程整理一下:

1、將修改的兩個(gè)類(lèi)添加到webwork2.2.x。jar中:MultiPartRequestWrapper。class和JakartaMultiPartRequestMonitor.class

2、修改webwork.webwork.properties:webwork.multipart.parser=monitor

3、將剛才下載的be.telio.mediastore.ui.upload的代碼加入

4、修改dwr.xml文件,添加下面的代碼:

xml 代碼

<create creator="new" javascript="UploadMonitor">     <PARAM < SPAN>name="class" value="  be.telio.mediastore.ui.upload.UploadMonitor"/>     create>     <convert converter="bean" match="  be.telio.mediastore.ui.upload.UploadInfo"/>

5、將下載的包中的resource文件夾拷貝到web目錄下

6、建立一個(gè)文件上傳action

7、建立Webwork文件上傳頁(yè)面,添加幾個(gè)js,同時(shí)在form中添加startProgress():

<script src='/ugc/resources/js/upload.js'> </script>  <script src='/ugc/dwr/interface/UploadMonitor.js'>   </script>  <script src='/ugc/dwr/engine.js'>   </script>  <script src='/ugc/dwr/util.js'>   </script>   <ww:form action="doUpload" method="POST" enctype="  multipart/form-data" onsubmit="startProgress()">

上述就是小編為大家分享的WebWork中怎么實(shí)現(xiàn)文件上傳功能了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI