Struts2教程7:上傳任意多個檔案
本文為原創,如需轉載,請註明作者和出處,謝謝!
一、上傳單個檔案
上傳檔案是很多Web程式都具有的功能。在Struts1.x中已經提供了用於上傳檔案的元件。而在Struts2中提供了一個更為容易操作的上傳檔案元件。所不同的是,Struts1.x的上傳元件需要一個ActionForm來傳遞檔案,而Struts2的上傳元件是一個攔截器(這個攔截器不用配置,是自動裝載的)。在本文中先介紹一下如何用struts2上傳單個檔案,最後介紹一下用struts2上傳任意多個檔案。
要用Struts2實現上傳單個檔案的功能非常容易實現,只要使用普通的Action即可。但為了獲得一些上傳檔案的資訊,如上傳檔名、上傳檔案型別以及上傳檔案的Stream物件,就需要按著一定規則來為Action類增加一些getter和setter方法。
在Struts2中,用於獲得和設定java.io.File(Struts2將檔案上傳到臨時路徑,並使用java.io.File開啟這個臨時檔案)的方法是getUpload和setUpload。獲得和設定檔名的方法是getUploadFileName和setUploadFileName,獲得和設定上傳檔案內容型別的方法是getUploadContentType和setUploadContentType。下面是用於上傳的動作類的完整程式碼:
package action;
import java.io.*;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport
{
private File upload;
private String fileName;
private String uploadContentType;
public String getUploadFileName()
{
return fileName;
}
public void setUploadFileName(String fileName)
{
this.fileName = fileName;
}
public File getUpload()
{
return upload;
}
public void setUpload(File upload)
{
this.upload = upload;
}
public void setUploadContentType(String contentType)
{
this.uploadContentType=contentType;
}
public String getUploadContentType()
{
return this.uploadContentType;
}
public String execute() throws Exception
{
java.io.InputStream is = new java.io.FileInputStream(upload);
java.io.OutputStream s = new java.io.FileOutputStream("d:\upload\" + fileName);
byte buffer[] = new byte[8192];
int count = 0;
while((count = is.read(buffer)) > 0)
{
os.write(buffer, 0, count);
}
os.close();
is.close();
return SUCCESS;
}
}
在execute方法中的實現程式碼就很簡單了,只是從臨時檔案複製到指定的路徑(在這裡是d:upload)中。上傳檔案的臨時目錄的預設值是javax.servlet.context.tempdir的值,但可以通過struts.properties(和struts.xml在同一個目錄下)的struts.multipart.saveDir屬性設定。Struts2上傳檔案的預設大小限制是2M(2097152位元組),也可以通過struts.properties檔案中的struts.multipart.maxSize修改,如struts.multipart.maxSize=2048 表示一次上傳檔案的總大小不能超過2K位元組。
下面的程式碼是上傳檔案的JSP頁面程式碼:
上傳單個檔案
enctype="multipart/form-data">
也可以在success.jsp頁中通過獲得檔案的屬性(檔名和檔案內容型別),程式碼如下:
二、上傳任意多個檔案
在Struts2中,上傳任意多個檔案也非常容易實現。首先,要想上傳任意多個檔案,需要在客戶端使用DOM技術生成任意多個標籤。name屬性值都相同。程式碼如下:
function addComponent()
{
var uploadHTML = document.createElement( "");
document.getElementById("files").appendChild(uploadHTML);
uploadHTML = document.createElement( "");
document.getElementById("files").appendChild(uploadHTML);
}
method="post" enctype="multipart/form-data">
上面的javascript程式碼可以生成任意多個標籤,name的值都為file。至於Action類,和上傳單個檔案的Action類基本一至,只需要將三個屬性的型別改為List即可。程式碼如下:
package action;
import java.io.*;
import com.opensymphony.xwork2.ActionSupport;
public class UploadMoreAction extends ActionSupport
{
private java.util.List uploads;
private java.util.List fileNames;
private java.util.List uploadContentTypes;
public java.util.List getUploadFileName()
{
return fileNames;
}
public void setUploadFileName(java.util.List fileNames)
{
this.fileNames = fileNames;
}
public java.util.List getUpload()
{
return uploads;
}
public void setUpload(java.util.List uploads)
{
this.uploads = uploads;
}
public void setUploadContentType(java.util.List contentTypes)
{
this.uploadContentTypes = contentTypes;
}
public java.util.List getUploadContentType()
{
return this.uploadContentTypes;
}
public String execute() throws Exception
{
if (uploads != null)
{
int i = 0;
for (; i < uploads.size(); i++)
{
java.io.InputStream is = new java.io.FileInputStream(uploads.get(i));
java.io.OutputStream s = new java.io.FileOutputStream(
"d:\upload\" + fileNames.get(i));
byte buffer[] = new byte[8192];
int count = 0;
while ((count = is.read(buffer)) > 0)
{
os.write(buffer, 0, count);
}
os.close();
is.close();
}
}
return SUCCESS;
}
}
在execute方法中,只是對List物件進行列舉,在迴圈中的程式碼和上傳單個檔案時的程式碼基本相同。如果讀者使用過struts1.x的上傳元件,是不是感覺Struts2的上傳功能更容易實現呢? 在Struts1.x中上傳多個檔案時,可是需要建立帶索引的屬性的。而在Struts2中,就是這麼簡單就搞定了。 圖1是上傳任意多個檔案的介面。
圖1
在本文中給出了用Struts2上傳任意多個檔案的一個方法,如果哪位讀者有更好的方法,請跟貼!
一、上傳單個檔案
上傳檔案是很多Web程式都具有的功能。在Struts1.x中已經提供了用於上傳檔案的元件。而在Struts2中提供了一個更為容易操作的上傳檔案元件。所不同的是,Struts1.x的上傳元件需要一個ActionForm來傳遞檔案,而Struts2的上傳元件是一個攔截器(這個攔截器不用配置,是自動裝載的)。在本文中先介紹一下如何用struts2上傳單個檔案,最後介紹一下用struts2上傳任意多個檔案。
要用Struts2實現上傳單個檔案的功能非常容易實現,只要使用普通的Action即可。但為了獲得一些上傳檔案的資訊,如上傳檔名、上傳檔案型別以及上傳檔案的Stream物件,就需要按著一定規則來為Action類增加一些getter和setter方法。
在Struts2中,用於獲得和設定java.io.File(Struts2將檔案上傳到臨時路徑,並使用java.io.File開啟這個臨時檔案)的方法是getUpload和setUpload。獲得和設定檔名的方法是getUploadFileName和setUploadFileName,獲得和設定上傳檔案內容型別的方法是getUploadContentType和setUploadContentType。下面是用於上傳的動作類的完整程式碼:
package action;
import java.io.*;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport
{
private File upload;
private String fileName;
private String uploadContentType;
public String getUploadFileName()
{
return fileName;
}
public void setUploadFileName(String fileName)
{
this.fileName = fileName;
}
public File getUpload()
{
return upload;
}
public void setUpload(File upload)
{
this.upload = upload;
}
public void setUploadContentType(String contentType)
{
this.uploadContentType=contentType;
}
public String getUploadContentType()
{
return this.uploadContentType;
}
public String execute() throws Exception
{
java.io.InputStream is = new java.io.FileInputStream(upload);
java.io.OutputStream s = new java.io.FileOutputStream("d:\upload\" + fileName);
byte buffer[] = new byte[8192];
int count = 0;
while((count = is.read(buffer)) > 0)
{
os.write(buffer, 0, count);
}
os.close();
is.close();
return SUCCESS;
}
}
在execute方法中的實現程式碼就很簡單了,只是從臨時檔案複製到指定的路徑(在這裡是d:upload)中。上傳檔案的臨時目錄的預設值是javax.servlet.context.tempdir的值,但可以通過struts.properties(和struts.xml在同一個目錄下)的struts.multipart.saveDir屬性設定。Struts2上傳檔案的預設大小限制是2M(2097152位元組),也可以通過struts.properties檔案中的struts.multipart.maxSize修改,如struts.multipart.maxSize=2048 表示一次上傳檔案的總大小不能超過2K位元組。
下面的程式碼是上傳檔案的JSP頁面程式碼:
也可以在success.jsp頁中通過
二、上傳任意多個檔案
在Struts2中,上傳任意多個檔案也非常容易實現。首先,要想上傳任意多個檔案,需要在客戶端使用DOM技術生成任意多個標籤。name屬性值都相同。程式碼如下:
function addComponent()
{
var uploadHTML = document.createElement( "");
document.getElementById("files").appendChild(uploadHTML);
uploadHTML = document.createElement( "");
document.getElementById("files").appendChild(uploadHTML);
}
上面的javascript程式碼可以生成任意多個標籤,name的值都為file。至於Action類,和上傳單個檔案的Action類基本一至,只需要將三個屬性的型別改為List即可。程式碼如下:
package action;
import java.io.*;
import com.opensymphony.xwork2.ActionSupport;
public class UploadMoreAction extends ActionSupport
{
private java.util.List
private java.util.List
private java.util.List
public java.util.List
{
return fileNames;
}
public void setUploadFileName(java.util.List
{
this.fileNames = fileNames;
}
public java.util.List
{
return uploads;
}
public void setUpload(java.util.List
{
this.uploads = uploads;
}
public void setUploadContentType(java.util.List
{
this.uploadContentTypes = contentTypes;
}
public java.util.List
{
return this.uploadContentTypes;
}
public String execute() throws Exception
{
if (uploads != null)
{
int i = 0;
for (; i < uploads.size(); i++)
{
java.io.InputStream is = new java.io.FileInputStream(uploads.get(i));
java.io.OutputStream s = new java.io.FileOutputStream(
"d:\upload\" + fileNames.get(i));
byte buffer[] = new byte[8192];
int count = 0;
while ((count = is.read(buffer)) > 0)
{
os.write(buffer, 0, count);
}
os.close();
is.close();
}
}
return SUCCESS;
}
}
在execute方法中,只是對List物件進行列舉,在迴圈中的程式碼和上傳單個檔案時的程式碼基本相同。如果讀者使用過struts1.x的上傳元件,是不是感覺Struts2的上傳功能更容易實現呢? 在Struts1.x中上傳多個檔案時,可是需要建立帶索引的屬性的。而在Struts2中,就是這麼簡單就搞定了。 圖1是上傳任意多個檔案的介面。
圖1
在本文中給出了用Struts2上傳任意多個檔案的一個方法,如果哪位讀者有更好的方法,請跟貼!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12921506/viewspace-255113/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- struts2上傳多個檔案,下載 配製!程式碼
- php多個檔案上傳PHP
- 任意檔案上傳漏洞修復
- MVC檔案上傳 - 使用Request.Files上傳多個檔案MVC
- struts2 檔案上傳為空
- Struts2的檔案上傳下載
- 文字檔案上傳漏洞[任意.繞過.解析]
- fckeditor<=2.6.4任意檔案上傳漏洞
- 請問如何用struts上傳多個多個檔案??
- SpringMVC 單檔案上傳與多檔案上傳SpringMVC
- laravel 多檔案上傳Laravel
- SpringMVC多個檔案上傳實現SpringMVC
- 單個檔案上傳和批量檔案上傳
- java struts2結合swfupload實現上傳檔案的demo教程Java
- 安全漏洞問題5:上傳任意檔案
- PHP未明遠端任意檔案上傳漏洞(轉)PHP
- 菜鳥學SSH(五)——Struts2上傳檔案
- 記一個 FormData 多檔案上傳問題ORM
- Java大檔案上傳、分片上傳、多檔案上傳、斷點續傳、上傳檔案minio、分片上傳minio等解決方案Java斷點
- perl檔案上傳程式,支援多檔案! (轉)
- winfrom上傳多個檔案到指定資料夾
- AngularJS教程十二—— 檔案上傳AngularJS
- JMeter上傳檔案介面教程—01JMeter
- HttpFileCollection 實現多檔案上傳HTTP
- SpringMVC檔案上傳下載(單檔案、多檔案)SpringMVC
- struts2檔案上傳型別限制 之 zip和rar檔案型別型別
- 檔案上傳頁面有多個form表單,在火狐下無法上傳ORM
- Struts2框架的檔案上傳--common-fileupload框架
- php單個檔案上傳PHP
- php檔案上傳之多檔案上傳PHP
- SecureCRT上傳下載檔案教程(Zmodem使用教程)Securecrt
- PHP實現單檔案、多檔案上傳 封裝 物件導向實現檔案上傳PHP封裝物件
- Nodejs教程16:POST檔案上傳NodeJS
- JAVA Web 之 struts2檔案上傳下載演示(一)(轉)JavaWeb
- struts2 檔案上傳和下載,以及部分原始碼解析原始碼
- struts2:多模組多配置檔案開發
- LayUI多檔案上傳,支援歷史上傳預覽UI
- Windows Phone7 實現檔案上傳Windows