文件上傳這個功能是很多網站都要有的,當然,Struts對文件上傳也進了支持,可以說,使用Struts實現文件上傳是非常簡單的而且方便,下面來介紹一下。
首先,需要導入包commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar,後面的那個包是因為在下面的代碼中會使用到它裡面的一些方法,實際上也可以不加入,這些包都是可以在Struts的lib文件夾裡面找到的.
然後就是寫Action類了,這裡需要接收文件(File類型),文件名,文件類型,文件名必須和表單裡面的name屬性名一致,學過servlet的都知道為什麼,然後文件名的寫法是文件名+FileName,然後文件類型名稱的寫法是文件名+ContentType,分別把他們設置成屬性,就是分別為他們提供set和get方法。
接著需要把接受到的File文件轉存到服務器的目錄裡,否則它就存放在Struts的臨時目錄裡面,在Action執行完畢後會被刪除。具體方法是使用servletContextgetRealPath方法獲得項目的絕對路徑,然後建立一個目錄去存放這個上傳的文件。
代碼如下
-
- package com.bird.action;
-
- import java.io.File;
- import java.io.IOException;
-
- import org.apache.commons.io.FileUtils;
- import org.apache.struts2.ServletActionContext;
-
- public class FileUpload {
-
- private File image;//獲取上傳文件
- private String imageFileName;//獲取上傳文件名稱
- private String imageContentType;//獲取上傳文件類型
-
- public String getImageContentType() {
- return imageContentType;
- }
-
- public void setImageContentType(String imageContentType) {
- this.imageContentType = imageContentType;
- }
-
- public File getImage() {
- return image;
- }
-
- public void setImage(File image) {
- this.image = image;
- }
-
- public String getImageFileName() {
- return imageFileName;
- }
-
- public void setImageFileName(String imageFileName) {
- this.imageFileName = imageFileName;
- }
-
- public String execute(){
- String path = ServletActionContext.getServletContext().getRealPath("/images");
-
- System.out.println(path);
- if(image != null){
- File savefile = new File(new File(path),imageFileName);
- if(!savefile.getParentFile().exists())
- savefile.getParentFile().mkdirs();
- try {
- FileUtils.copyFile(image , savefile);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- String[] t = imageContentType.split("/");
- for(String s : t)
- System.out.println(s);
- }
- return "success";
- }
- }