日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java action 上传文件_JavaWeb框架_Struts2_(七)-----文件的上传和下载

發布時間:2025/3/19 java 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java action 上传文件_JavaWeb框架_Struts2_(七)-----文件的上传和下载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.? 前言

這個章節是Struts2框架應用最廣泛的三個版塊(上傳下載、國際化、校驗輸入)之一,所以這一版塊的學習還蠻重要的。

2.? 具體內容

2.1Struts2文件上傳

2.1.1單文件上傳

本小節通過一個示例講解Struts2如何實現單文件的上傳。

(1) 先寫一個選擇上傳單文件頁面(select.jsp)

User: mairr

Date: 17-12-7

Time: 下午9:04

To change this template use File | Settings | File Templates.

--%>

upload_test

輸入帳號:
選擇頭像:

如下所示的一個上傳選擇界面框:

(2) 當文件上傳頁面提交請求時,請求發送到upload.action,這是一個Struts2的Action,該Action處理上傳請求,具體的UploadAction類代碼如下:

packageaction;importcom.opensymphony.xwork2.ActionSupport;importorg.apache.commons.io.FileUtils;importorg.apache.struts2.ServletActionContext;importjava.io.File;importjava.io.IOException;public class UploadAction extendsActionSupport {

private String uid;          //封裝帳號(uid)請求參數屬性

private File headImage;         //封裝上傳文件域屬性

private String headImageContentType; //封裝上傳文件類型的屬性

privateString headImageFileName;     //封裝上傳文件屬性publicString getUid() {returnuid;

}public voidsetUid(String uid) {this.uid =uid;

}publicFile getHeadImage() {returnheadImage;

}public voidsetHeadImage(File headImage) {this.headImage =headImage;

}publicString getHeadImageContentType() {returnheadImageContentType;

}public voidsetHeadImageContentType(String headImageContentType) {this.headImageContentType =headImageContentType;

}publicString getHeadImageFileName() {returnheadImageFileName;

}public voidsetHeadImageFileName(String headImageFileName) {this.headImageFileName =headImageFileName;

}public String execute() throwsIOException {//上傳文件的保存位置在“/image”,該位置在tomcat服務器的“webapps”之中

String realpath= ServletActionContext.getServletContext().getRealPath("/image");//聲明文件目錄image,如果文件名不存在就建一個唄~

File file = newFile(realpath);if(!file.exists()){

file.mkdirs();

}//實現文件上傳,也就是做了一個方法調用~

FileUtils.copyFile(headImage,newFile(file,headImageFileName));returnSUCCESS;

}

}

需要注意的是,上面的Action除了包含兩個表單域的name屬性外,還包含headImageContentType和headImageFileName兩個屬性,這兩個屬性分別能用于封裝上傳文件的文件類型、上傳文件的文件名。可以這樣認為:如果表單中包含一個name屬性為xxx的文件域,則對應的Action需要使用3個屬性來封裝文件域信息:

類型為java.io.File的xxx屬性來封裝文件域的信息;

類型為String的xxxFileName屬性封裝了該文件域對應的文本內容;

類型為String的xxxContentType屬性封裝了該文件域對應的文件類型。

所以,在Action的execute方法中,可以直接通過這3個屬性獲取上傳文件的文件名、文件類型和文件內容。

(3) 接下來進行UploadAction的配置(struts.xml文件配置),具體代碼如下:

/p>

"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"

"http://struts.apache.org/dtds/struts-2.5.dtd">

/uploadSuccess.jsp

(4) 最后寫一個上傳成功頁面(uploadSuccess.jsp)

上傳初始頁

用戶帳號:

您的頭像:" alt="圖像無法顯示"/>

上傳過程圖:

(a)選擇圖片

(b)確認選擇

(c)提交之后,顯示上傳成功

2.1.2 攔截器實現文件的過濾

Struts2提供了一個名為fileUpload攔截器,通過配置該攔截器可以輕松地實現文件過濾。為了讓fileUpload攔截器起作用,只需要在處理文件上傳的Action中配置該攔截器引用即可。

配置fileUpload攔截器時可以指定如下兩個參數:

allowTypes:該參數指定允許上傳文件的類型,多個文件類型之間以英文逗號隔開;

maximumSize:該參數指定允許上傳文件的大小,單位是字節。

當文件過濾失敗后,系統自動轉入input邏輯視圖,因此必須為Action配置名為input的邏輯視圖。

(1) 通過攔截器來實現文件過濾的struts.xml配置文件如下:

/p>

"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"

"http://struts.apache.org/dtds/struts-2.5.dtd">

image/x-png,image/bmp,image/gif,image/jpeg,image/jpg

65536

/uploadSuccess.jsp

/select.jsp

格式不對和容量大于64kb會上傳失敗,直接返回重新選擇的界面。如果上傳失敗,系統需要回應上傳失敗信息。因此,需要在文件上傳頁selectFile.jsp頁面中加上“”------->(我直接加到了selectFile.jsp代碼中,你可以回看上面)

(a) 文件格式不對

------(提交之后)------->

(b) 文件大小超過了限額

-------(提交之后)----->

2.1.3? 文件上傳的常量配置

上傳文件時,系統默認使用web服務器的工作路徑作為臨時路徑。為了避免文件上傳時候使用Web服務器的工作路徑作為臨時路徑,則應該設置struts.multipart.saveDir常量。該常量指定上傳文件的臨時保存路徑。該常量配置示例如下:

此外,還有一個文件上傳的常量struts.multipart.maxSize。該常量指定struts.mutipart.maxSize。該常量指定在struts2文件上傳中整個請求內容所允許的最大字節數,默認為2097152(即2MB)。該常量配置示例如下:

2.1.4? Struts2多文件上傳

在Struts2應用中,如果一個頁面有多個文件域需要實現上傳,則可以為每個文件域提供三個屬性,分別封裝該文件域對應的文件名、文件類型和文件內容。多文件上傳與單文件上傳沒有什么區別,僅僅是利用數組同時上傳多個文件的方式。

在處理多文件上傳時,要注意改變的是,在Action類中,需要使用三個數組分別封裝文件名、文件類型和文件內容。

//實現單文件上傳代碼如下:

FileUtils.copyFile(headImage,newFile(file,headImageFileName));//實現多文件下載代碼如下:

for(int i = 0; i < headImage.length(); i++){

File uploadImage=headImage[i];

FileUtils.copyFile(uploadImage,newFile(file,headImageFileName[i]));

}

2.2? Struts2文件下載

利用Struts2來處理文件的下載的問題時,能夠解決下載文件的文件名為中英文等等都不出現亂碼。此外,還能夠在用戶下載之前進行檢查,判斷用戶是否有足夠的權限來下載該文件等。下面用一個示例來講解文件的下載:

(1) 先寫一個下載頁面:(index.jsp)

User: mairr

Date: 17-12-9

Time: 下午2:20

To change this template use File | Settings | File Templates.

--%>

test_download中
請下載英文課件:英

(2) 在Struts2框架文件下載Action類中,需要提供一個返回InputStream流方法,該輸入流代表了被下載文件的入口。該Action類代碼如下所示:(DownLoadAction.java)

packageaction;importcom.opensymphony.xwork2.ActionSupport;importorg.apache.struts2.ServletActionContext;importutil.MyUtil;importjava.io.InputStream;importjava.io.UnsupportedEncodingException;public class DownLoadAction extendsActionSupport{private String downPath; //下載時的文件名

private String contentType; //保存文件類型

private String filename; //保存時的文件名

publicString getContentType() {returncontentType;

}public voidsetContentType(String contentType) {this.contentType =contentType;

}publicString getFilename() {returnfilename;

}public voidsetFilename(String filename) {this.filename =filename;

}publicString getDownPath() {returndownPath;

}public voidsetDownPath(String downPath) {try{//解決下載時候的中文文件亂碼問題

downPath = new String(downPath.getBytes("ISO-8859-1"),"UTF-8");

}catch(UnsupportedEncodingException e){

e.printStackTrace();

}this.downPath =downPath;

}/**下載用的Action返回一個InputString實例,該方法對應Action配置

*里面的result的inputName參數,值為inputString

**/

publicInputStream getInputString(){returnServletActionContext.getServletContext().getResourceAsStream(downPath);

}publicString execute(){//下載保存時的文件名和被下載的文件名一樣

filename =downPath;//下載的文件路徑,請在webapps目錄下創建images

downPath = "images/" +downPath;//保存文件的類型

contentType= "application/x-msdownload";/**對下載的文件名按照UTF-8進行編碼,解決下載窗口中的中文亂碼問題

* 其中,MyUtil是自己定義的一個類*/filename=MyUtil.toUTF8String(filename);returnSUCCESS;

}

}

(3) 在上述的Action類中定義了一個工具類MyUtil,該類中有一個靜態方法toUTF8String實現對下載的文件名按照UTF-8進行編碼,解決下載窗口中中文亂碼的問題:(MyUtil.java)

packageutil;importjava.io.UnsupportedEncodingException;public classMyUtil {//對下載文件按照 UTF-8 進行編碼

public staticString toUTF8String(String str){

StringBuffer sb= newStringBuffer();int len =str.length();for (int i = 0; i < len; i++)

{//取出字符中的每個字符

char c =str.charAt(i);//Unicode碼值在0~255之間,不做處理

if(c>=0 && c <= 255){

sb.append(c);

}else{//轉換 UTF-8 編碼

byteb[];try{

b= Character.toString(c).getBytes("UTF-8");

}catch(UnsupportedEncodingException e){

e.printStackTrace();

b= null;

}//轉換為%HH的字符串形式

for(int j = 0;j < b.length ; j++){int k =b[j];if(k < 0){

k&= 255;

}

sb.append("%" +Integer.toHexString(k).toUpperCase());

}

}

}returnsb.toString();

}

}

(4) 最后,完成Action的配置,關鍵是要配置一個類型為stream的結果,配置時需要指定如下四個屬性:

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

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

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

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

具體代碼如下:(struts.xml)

/p>

"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"

"http://struts.apache.org/dtds/struts-2.5.dtd">

${contentType}

inputStream

attachment;filename=${filename}

4096

(5)? 最后的下載窗口:

總結

以上是生活随笔為你收集整理的java action 上传文件_JavaWeb框架_Struts2_(七)-----文件的上传和下载的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。