Struts2 實現文件上傳


單個文件上傳

關於如何創建Struts2項目:Struts2 初體驗

一、創建jsp頁面:

注意!要上傳文件,表單必須添加 enctype 屬性,如下:  enctype="multipart/form-data"

index.jsp 代碼如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <!-- 注意!表單必須添加 enctype 屬性,值為"multipart/form-data" -->
    <form action="upload.action" method="post" enctype="multipart/form-data">
        <input type="file" name="file" />
        <input type="submit" value="上傳"/>
    </form>
</body>
</html>

 

二、創建Action類:

1. 添加三個私有字段,並添加相應的get,set方法。

  private File file; ——上傳的文件,變量名對應頁面上"file"input的name屬性值。類型為java.io.File

  private String fileContentType;——上傳文件的格式類型名,變量名格式為:頁面上"file"input的name屬性值+ContentType

  private String fileFileName——上傳的文件名,變量名格式為:頁面上"file"input的name屬性值+fileFileName。

2. 使用struts2提供的FileUtils類拷貝進行文件的拷貝。FileUtils類位於org.apache.commons.io包下。

3. 在項目目錄下的WebContent目錄下添加 upload 文件夾,用於存放客戶端上傳過來的文件,對應第15行代碼。

Upload.java代碼如下:

 1 import java.io.File;
 2 import java.io.IOException;
 3 import org.apache.commons.io.FileUtils;
 4 import org.apache.struts2.ServletActionContext;
 5 import com.opensymphony.xwork2.ActionSupport;
 6 
 7 public class Upload extends ActionSupport{
 8     private File file;
 9     private String fileContentType;
10     private String fileFileName;
11     
12     @Override
13     public String execute() throws Exception {
14         //得到上傳文件在服務器的路徑加文件名
15         String target=ServletActionContext.getServletContext().getRealPath("/upload/"+fileFileName);
16         //獲得上傳的文件
17         File targetFile=new File(target);
18         //通過struts2提供的FileUtils類拷貝
19         try {
20             FileUtils.copyFile(file, targetFile);
21         } catch (IOException e) {
22             e.printStackTrace();
23         }
24         return SUCCESS;
25     }
26 
27     //省略get,set方法...........
28 
29 }

 

三、在struts.xml中添加相應的配置代碼。

struts.xml代碼如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="upload" class="Upload">
            <result>index.jsp</result>
        </action>
    </package>
</struts>

 

四、測試。

啟動服務器,進入index頁面。

選擇一改圖片,點擊上傳提交表單。

打開upload文件夾(注意,這里指的是web服務器下的目錄,如我用的web服務器是tomcat安裝在電腦D盤,項目名稱為“Struts2Upload”那么其路徑為:D:\apache-tomcat-7.0.40\webapps\Struts2Upload\upload)可以看到剛才選中的圖片已經上傳到該目錄下了。

 


 

上傳多個文件

 一、修改頁面文件

增加繼續添加按鈕和 addfile() 方法,讓頁面可以通過javascript增加 input 標簽。

修改后的 index.jsp代碼如下:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <script type="text/javascript">
 8     //添加javascript方法 addfile() 在頁面中境加input標簽、
 9     function addfile(){
10         var file = document.createElement("input");
11         file.type="file";
12         file.name="file";
13         document.getElementById("fileList").appendChild(file);
14         document.getElementById("fileList").appendChild(document.createElement("br"));
15     }
16 </script>
17 <title>Insert title here</title>
18 </head>
19 <body>
20     <!-- 注意!表單必須添加 enctype 屬性,值為"multipart/form-data" -->
21     <form action="upload.action" method="post" enctype="multipart/form-data">
22         <div id="fileList">
23             <input type="file" name="file" /><br/>
24         </div>
25         <!-- 添加繼續添加按鈕,點擊按鈕調用addfile() -->
26         <input type="button" value="繼續添加" onclick="addfile()" />
27         <input type="submit" value="上傳"/>
28     </form>
29 </body>
30 </html>

 

二、修改Action類

1. 把三個私有字段(file,fileContentType,fileFileName)的類型更改為數組或集合類型。並添加相應的get,set方法。

2. 通過循環來上傳多個文件。

修改后的Upload.java代碼如下:

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class Upload extends ActionSupport{
    //把這三個字段類型更改為數組或集合
    private File[] file;
    private String[] fileContentType;
    private String[] fileFileName;
    
    @Override
    public String execute() throws Exception {
        //通過循環來上傳多個文件
        for(int i=0;i<file.length;i++){
            //得到上傳文件在服務器的路徑加文件名
            String target=ServletActionContext.getServletContext().getRealPath("/upload/"+fileFileName[i]);
            //獲得上傳的文件
            File targetFile=new File(target);
            //通過struts2提供的FileUtils類拷貝
            try {
                FileUtils.copyFile(file[i], targetFile);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return SUCCESS;
        
    }

    //省略set,get方法...................

}

 

三、測試

1. 啟動服務器,打開index.jsp頁面。點擊繼續添加,添加兩個input。同時上傳三張圖片。

2. 點擊上傳提交表單。打開upload文件夾,可以看到剛才選中的三張圖片已經上傳到該目錄下了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM