成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Struts2控制文件上傳下載功能實例代碼

之前介紹servlet3.0新特性的時候有提到過servlet API提供了一個part類來實現(xiàn)對文件的上傳和保存,Struts其實是在其基礎(chǔ)上做了進一步的封裝,更加簡單易用。至于文件下載,Struts貫徹AOP 思想,在下載之前提供對用戶權(quán)限控制的API。

我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、澠池ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的澠池網(wǎng)站制作公司

下面我們將詳細介紹上傳和下載的相關(guān)內(nèi)容。

一、Struts文件上傳機制

     想要實現(xiàn)文件上傳功能,頁面的表單的method屬性必須被指定為post,還有enctype屬性必須為multipart/form-data,該值表示上傳的內(nèi)容將會以二進制的形式被上傳到服務(wù)器,至于該屬性的其他值的作用及他們之間的區(qū)別,請查看之前文章:servlet3.0新特性。下面給出表現(xiàn)層頁面代碼:

 <body>
  <s:form method="post" enctype="multipart/form-data" action="/upload">
   <s:file name="ufile" label="瀏覽"/>
   <s:submit value="上傳"/>
  </s:form>
 </body>

實際上在Struts的文件上傳中,它使用三個Action屬性來描述被上傳的文件。commons-fileupload-1.3.2.jar和commons-io-2.2.jar這兩個包就是用于輔助表單上傳的內(nèi)容賦值到action屬性中,所以在使用Struts的文件上傳之前應(yīng)當(dāng)先包含著兩個包到項目中。下面給出upload對應(yīng)的action:

public class UploadFile extends ActionSupport {
  //封裝的上傳文件的文件內(nèi)容
  private File ufile;
  //封裝的上傳文件的文件名
  private String ufileFileName;
  //封裝的上傳文件的文件類型
  private String ufileContentType;
  ....省去getter,setter方法

  public String execute() throws IOException {
    FileInputStream fin = new FileInputStream(ufile);
    FileOutputStream fos = new FileOutputStream("F:\\360\\"+ufileFileName);
    byte[] buffer = new byte[1024];
    int len;
    while((len = fin.read(buffer))>0){
      fos.write(buffer,0,len);
    }
    return SUCCESS;
  }
}

先不看execute方法,在該action中,我們可以看到有三個屬性。ufile封裝了上傳的文件的二進制內(nèi)容,ufileFileName(xxxFileName)封裝了該文件的文件名,ufileContentType(xxxContentType)封裝了該文件的類型。他們的值是我們不必關(guān)心的,框架會根據(jù)表單上傳的文件對他們進行賦值,只需要遵守他的命名規(guī)則即可。

execute方法主要是完成將上傳的文件保存到硬盤上,代碼也比較簡單,讀取屬性ufile中的內(nèi)容,寫入磁盤指定位置。下面我們看看運行的結(jié)果截圖:

Struts2 控制文件上傳下載功能實例代碼

Struts2 控制文件上傳下載功能實例代碼

至此我們就完成了對上傳文件的獲取保存,總體上看來,實際上還是使用了三個action實例屬性對上傳文件相關(guān)信息的封裝。一個屬性封裝的是該上傳文件的二進制內(nèi)容,一個屬性封裝該文件的文件名稱,一個屬性封裝的是該文件的文件類型。實際上把控好這三個屬性,基本可以完成對該上傳文件的所有操作。下面我們看文件下載。

二、Struts文件下載機制

     廣義上的文件下載,其實可以使用a標(biāo)簽鏈接到對應(yīng)資源完成對資源的下載,但是在瀏覽器中使用這種方式會導(dǎo)致瀏覽器直接打開該資源文件而非彈出下載框指定下載位置。Struts下載機制通過配置result元素的type屬性為stream來實現(xiàn)的。在類型為stream的result元素中可以配置一些參數(shù),這些參數(shù)主要有以下一些:

contentType:指定被下載文件的文件類型

inputName:指定被下載文件的輸入流入口

contentDisposition:指定下載文件的文件名

bufferSize:指定下載文件的緩沖大小

具體的應(yīng)用我們從代碼示例中體會:

//直接訪問的action
 <body>
   <a href="/download" rel="external nofollow" >下載資源</a>
 </body>
public class DownloadFile extends ActionSupport {
  private String inputPath;
  public void setInputPath(String s){
    this.inputPath = s;
  }
  public String getInputPath(){
    return this.inputPath;
  }
  public InputStream getTarFile(){
    return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
  }
  @Override
  public String execute(){
    return SUCCESS;
  }
}
//download的action配置
    <action name="download" class="MyPackage.DownloadFile">
      <param name="inputPath">/m.jpg</param>
      <result type="stream">
        <param name="inputName">tarFile</param>
        <param name="contentType">image/jpg</param>
        <param name="contentDisposition">attachment;filename="walker.jpg"</param>
      </result>
    </action>

首先解析下Struts.xml中有關(guān)action的配置代碼,第一個param元素為action中的屬性inputPath動態(tài)賦值,該參數(shù)的值指定了將要被下載的文件資源位置,我們此處指定的web應(yīng)用根目錄下的一張圖片。

接下來就是配置的結(jié)果類型result,該元素的默認type屬性為dispather表示分發(fā)的意思,而我們此處的stream表示流的意思,它將返回給瀏覽器一個InputStream(被下載文件的入口)。其中它配置了inputName,該參數(shù)的值對應(yīng)于action中g(shù)etXXXX方法,當(dāng)接受到請求的時候,框架會通過該參數(shù)匹配調(diào)用action中的getXXXX方法,該方法會根據(jù)指定資源路徑返回該文件的入口InputStream,交給瀏覽器。

我們也看到contentType參數(shù)指定了該文件的類型,和互聯(lián)網(wǎng)MIME標(biāo)準(zhǔn)中的規(guī)定類型一致,例如:text/plain代表純文本,text/xml表示XML,image/gif代表GIF圖片,image/jpeg代表JPG圖片等。

contentDisposition參數(shù)表示被下載文件在保存時候的文件名,它有兩個屬性值。第一個屬性值可以是inline或者attachment,它指定瀏覽器是直接打開還是下載,filename指定了下載或者打開文件的名稱。下面看上述代碼的運行結(jié)果截圖:

Struts2 控制文件上傳下載功能實例代碼

Struts2 控制文件上傳下載功能實例代碼

至此,有關(guān)Struts控制文件的上傳和下載的相關(guān)內(nèi)容已經(jīng)簡單介紹完了,有些核心的,深層次的內(nèi)容涉及到攔截器,所以當(dāng)我們介紹完攔截器之后,想必大家會有更加深刻的理解。

以上所述是小編給大家介紹的Struts2 控制文件上傳下載功能實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對創(chuàng)新互聯(lián)網(wǎng)站的支持!

新聞名稱:Struts2控制文件上傳下載功能實例代碼
轉(zhuǎn)載來源:http://jinyejixie.com/article34/pocose.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、服務(wù)器托管網(wǎng)站收錄、電子商務(wù)、營銷型網(wǎng)站建設(shè)、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營
桐梓县| 拉萨市| 蛟河市| 峨眉山市| 上虞市| 洞头县| 土默特右旗| 保亭| 嘉黎县| 裕民县| 沁阳市| 榆中县| 青浦区| 眉山市| 客服| 邯郸县| 溧水县| 惠安县| 平罗县| 富蕴县| 仪征市| 抚州市| 汝城县| 祁阳县| 聊城市| 崇阳县| 怀集县| 灌云县| 芜湖市| 奎屯市| 元阳县| 南雄市| 西丰县| 静宁县| 呈贡县| 宁乡县| 宁都县| 武乡县| 宁明县| 昆山市| 天门市|