天天看點

Struts檔案上傳,下載下傳,重傳,預覽

    今日群裡一兄弟問我能否給一份struts檔案上傳下載下傳的例子,因為自己項目比較緊是以想在網上找

些源碼給他,但是縱觀全網,寫的都不是太全,這讓新手使用都不是太友善,利用周天花了30分鐘寫了

一個。釋出出來,釋出出來大家共同學習!其中包括資料庫的設計,路徑存儲,重制上傳删除伺服器源

檔案,圖檔預覽,等!

知識你我共同分享!

首先明白檔案上傳下載下傳的原理。

①、利用輸入流個輸出流InputStream OutputStream

②、我們的Struts自帶的FileUtiles.copyFile上傳元件的!

本文采用的事第二種!另為了友善讀者可以直接的使用本源碼,采取的事多檔案上傳。一勞永逸!另由于時間關系,采用存儲方式是JDBC和Mysql

第一步:我們需要相關的開發架包:

<a href="http://blog.51cto.com/attachment/201311/174042175.png" target="_blank"></a>

如果這幾個的意思您不懂可以直接百度。也可以給我留言!

第二步:建立我的資料庫表結構

<a href="http://blog.51cto.com/attachment/201311/174130812.png" target="_blank"></a>

第三步:編寫我們的DBUtil

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

<code>package</code> <code>org.usc.util;</code>

<code>import</code> <code>java.sql.*;</code>

<code>public</code> <code>class</code> <code>DBUtil {</code>

<code>    </code><code>public</code> <code>static</code> <code>Connection conn = </code><code>null</code><code>;</code>

<code>    </code><code>public</code> <code>static</code> <code>Connection getConn() {</code>

<code>        </code><code>try</code> <code>{</code>

<code>            </code><code>Class.forName(</code><code>"com.mysql.jdbc.Driver"</code><code>);</code>

<code>        </code><code>} </code><code>catch</code> <code>(ClassNotFoundException e) {</code>

<code>            </code><code>e.printStackTrace();</code>

<code>        </code><code>}</code>

<code>            </code><code>conn = DriverManager.getConnection(</code>

<code>                    </code><code>"jdbc:mysql://localhost:3306/oracle"</code><code>, </code><code>"root"</code><code>, </code><code>"root"</code><code>);</code>

<code>        </code><code>} </code><code>catch</code> <code>(SQLException e) {</code>

<code>        </code><code>return</code> <code>conn;</code>

<code>    </code><code>}</code>

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>close() {</code>

<code>        </code><code>if</code> <code>(conn != </code><code>null</code><code>) {</code>

<code>            </code><code>try</code> <code>{</code>

<code>                </code><code>conn.close();</code>

<code>            </code><code>} </code><code>catch</code> <code>(SQLException e) {</code>

<code>                </code><code>e.printStackTrace();</code>

<code>            </code><code>}</code>

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>main(String[] args) {</code>

<code>        </code><code>getConn();</code>

<code>        </code><code>System.out.println(getConn());</code>

<code>}</code>

第四步:編寫實體類

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

<code>package</code> <code>org.usc.entity;</code>

<code>/**</code>

<code> </code><code>* 檔案類,需要的時候,可以和資料庫進行關聯</code>

<code> </code><code>*</code>

<code> </code><code>*/</code>

<code>public</code> <code>class</code> <code>UploadFiles</code>

<code>{</code>

<code>    </code><code>private</code> <code>String uploadFileName;</code><code>//上傳的檔案名稱</code>

<code>    </code><code>private</code> <code>String uploadContentType;</code><code>//類型</code>

<code>    </code><code>private</code> <code>String uploadRealName;</code><code>//伺服器儲存的檔案真實名稱,UUID</code>

<code>    </code><code>private</code> <code>String txt;</code>

<code>    </code><code>private</code> <code>String path;</code>

<code>    </code><code>//如果使用資料庫的話,建議這三個字段都進行儲存</code>

<code>    </code><code>public</code> <code>String getUploadFileName()</code>

<code>    </code><code>{</code>

<code>        </code><code>return</code> <code>uploadFileName;</code>

<code>    </code><code>public</code> <code>void</code> <code>setUploadFileName(String uploadFileName)</code>

<code>        </code><code>this</code><code>.uploadFileName = uploadFileName;</code>

<code>    </code><code>public</code> <code>String getUploadContentType()</code>

<code>        </code><code>return</code> <code>uploadContentType;</code>

<code>    </code><code>public</code> <code>void</code> <code>setUploadContentType(String uploadContentType)</code>

<code>        </code><code>this</code><code>.uploadContentType = uploadContentType;</code>

<code>    </code><code>public</code> <code>String getUploadRealName()</code>

<code>        </code><code>return</code> <code>uploadRealName;</code>

<code>    </code><code>public</code> <code>void</code> <code>setUploadRealName(String uploadRealName)</code>

<code>        </code><code>this</code><code>.uploadRealName = uploadRealName;</code>

<code>    </code><code>public</code> <code>String getTxt() {</code>

<code>        </code><code>return</code> <code>txt;</code>

<code>    </code><code>public</code> <code>void</code> <code>setTxt(String txt) {</code>

<code>        </code><code>this</code><code>.txt = txt;</code>

<code>    </code><code>public</code> <code>String getPath() {</code>

<code>        </code><code>return</code> <code>path;</code>

<code>    </code><code>public</code> <code>void</code> <code>setPath(String path) {</code>

<code>        </code><code>this</code><code>.path = path;</code>

<code>                                                                                                                                                                       </code> 

第五步:編寫相關Dao方法

<code>package</code> <code>org.usc.dao;</code>

<code>import</code> <code>org.usc.entity.UploadFiles;</code>

<code>import</code> <code>org.usc.util.DBUtil;</code>

<code>public</code> <code>class</code> <code>Dao {</code>

<code>                                                                                                                                                                   </code> 

<code>    </code><code>public</code> <code>boolean</code> <code>add(UploadFiles uploadFiles ){</code>

<code>        </code><code>boolean</code> <code>result=</code><code>false</code><code>;</code>

<code>        </code><code>Connection conn=DBUtil.getConn();</code>

<code>            </code><code>PreparedStatement ps=conn.prepareStatement(</code><code>"insert into UploadFiles(uploadFileName,uploadRealName,uploadContentType,txt,path)values(?,?,?,?,?)"</code><code>);</code>

<code>            </code><code>ps.setString(</code><code>1</code><code>, uploadFiles.getUploadFileName());</code>

<code>            </code><code>ps.setString(</code><code>2</code><code>, uploadFiles.getUploadRealName());</code>

<code>            </code><code>ps.setString(</code><code>3</code><code>, uploadFiles.getUploadContentType());</code>

<code>            </code><code>ps.setString(</code><code>4</code><code>, uploadFiles.getTxt());</code>

<code>            </code><code>ps.setString(</code><code>5</code><code>, uploadFiles.getPath());</code>

<code>            </code><code>ps.execute();</code>

<code>            </code><code>result=</code><code>true</code><code>;</code>

<code>        </code><code>}</code><code>finally</code><code>{</code>

<code>            </code><code>DBUtil.close();</code>

<code>        </code><code>return</code> <code>result;</code>

<code>    </code><code>// 根據ID的編号查詢</code>

<code>        </code><code>public</code> <code>UploadFiles querykById(</code><code>int</code> <code>id) {</code>

<code>            </code><code>Connection conn = DBUtil.getConn();</code>

<code>            </code><code>UploadFiles uploadFiles = </code><code>new</code> <code>UploadFiles();</code>

<code>                </code><code>PreparedStatement ps = conn</code>

<code>                        </code><code>.prepareStatement(</code><code>"select*from UploadFiles where id = ?"</code><code>);</code>

<code>                </code><code>ps.setInt(</code><code>1</code><code>, id);</code>

<code>                </code><code>ResultSet rs = ps.executeQuery();</code>

<code>                </code><code>if</code> <code>(rs.next()) {</code>

<code>                    </code><code>uploadFiles.setPath(rs.getString(</code><code>"path"</code><code>));</code>

<code>                    </code><code>uploadFiles.setTxt(rs.getString(</code><code>"txt"</code><code>));</code>

<code>                    </code><code>uploadFiles.setUploadFileName(rs.getString(</code><code>"uploadFileName"</code><code>));</code>

<code>                    </code><code>uploadFiles.setUploadRealName(rs.getString(</code><code>"uploadRealName"</code><code>));</code>

<code>                    </code><code>uploadFiles.setUploadContentType(rs.getString(</code><code>"uploadContentType"</code><code>));</code>

<code>                                                                                                                                                                                   </code> 

<code>                </code><code>}</code>

<code>            </code><code>return</code> <code>uploadFiles;</code>

第六步:編寫上傳Action

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

<code>package</code> <code>org.usc.action;</code>

<code>import</code> <code>java.io.File;</code>

<code>import</code> <code>java.util.*;</code>

<code>import</code> <code>org.apache.commons.io.FileUtils;</code>

<code>import</code> <code>org.apache.struts2.ServletActionContext;</code>

<code>import</code> <code>org.usc.dao.Dao;</code>

<code>import</code> <code>com.opensymphony.xwork2.ActionSupport;</code>

<code>public</code> <code>class</code> <code>UploadAction </code><code>extends</code> <code>ActionSupport {</code>

<code>    </code><code>/**</code>

<code>     </code><code>*</code>

<code>     </code><code>*/</code>

<code>    </code><code>private</code> <code>static</code> <code>final</code> <code>long</code> <code>serialVersionUID = 1L;</code>

<code>    </code><code>private</code> <code>File[] upload;</code><code>// 實際上傳檔案</code>

<code>    </code><code>private</code> <code>String[] uploadContentType; </code><code>// 檔案的内容類型</code>

<code>    </code><code>private</code> <code>String[] uploadFileName; </code><code>// 上傳檔案名</code>

<code>    </code><code>// 注意FileName和ContentType 必須這樣寫!以你的&lt;input type="file" name="upload"&gt;</code>

<code>    </code><code>private</code> <code>List&lt;UploadFiles&gt; uploadFiles = </code><code>new</code> <code>ArrayList&lt;UploadFiles&gt;();</code><code>// 上傳檔案集合</code>

<code>    </code><code>private</code> <code>String message;</code>

<code>    </code><code>public</code> <code>static</code> <code>String FILE_ROOT = </code><code>""</code><code>;</code>

<code>    </code><code>public</code> <code>static</code> <code>String UPLOAD_PATH = </code><code>"/upload"</code><code>; </code><code>// 上傳檔案路徑</code>

<code>    </code><code>public</code> <code>String execute() </code><code>throws</code> <code>Exception {</code>

<code>            </code><code>String path = ServletActionContext.getServletContext().getRealPath(</code>

<code>                    </code><code>FILE_ROOT);</code>

<code>            </code><code>String path2 = UPLOAD_PATH + </code><code>"/shangchuan/"</code><code>;</code>

<code>            </code><code>String targetDirectory = path + path2;</code>

<code>            </code><code>File file = </code><code>new</code> <code>File(targetDirectory);</code><code>// 擷取檔案流路徑</code>

<code>            </code><code>if</code> <code>(!file.exists()) {</code>

<code>                </code><code>file.mkdirs();</code>

<code>            </code><code>for</code> <code>(</code><code>int</code> <code>i = </code><code>0</code><code>; i &lt; upload.length; i++) {</code>

<code>                </code><code>String fileName = uploadFileName[i];</code><code>// 上傳的檔案名</code>

<code>                </code><code>String type = uploadContentType[i];</code><code>// 檔案類型</code>

<code>                </code><code>String realName = UUID.randomUUID().toString()</code>

<code>                        </code><code>+ getExt(fileName);</code><code>// 儲存的檔案名稱,使用UUID+字尾進行儲存</code>

<code>                </code><code>File target = </code><code>new</code> <code>File(targetDirectory, realName);</code>

<code>                </code><code>FileUtils.copyFile(upload[i], target);</code><code>// 上傳至伺服器的目錄,一般都這樣操作,</code>

<code>                </code><code>/*</code>

<code>                 </code><code>* UploadFiles uf = new UploadFiles();// 建立檔案</code>

<code>                 </code><code>* uf.setUploadContentType(type);</code>

<code>                 </code><code>* uf.setUploadFileName(fileName);//上傳的檔案名稱</code>

<code>                 </code><code>* uf.setUploadRealName(realName);//儲存資料庫的檔案名稱 采用加密形式</code>

<code>                 </code><code>* uploadFiles.add(uf);// 添加到需要下載下傳檔案的List集合中</code>

<code>                 </code><code>*/// uploadRealName[i]=UUID.randomUUID().toString();</code>

<code>                    </code><code>// System.out.println("uploadRealName:"+uploadRealName[i]);</code>

<code>                 </code><code>* for(File file:upload){</code>

<code>                 </code><code>* System.out.println("filename:"+file.getName()); }</code>

<code>                 </code><code>*/</code>

<code>                </code><code>System.out.println(</code><code>"filename真實的名字:"</code> <code>+ fileName);</code>

<code>                </code><code>System.out.println(</code><code>"儲存資料庫中的加密名字"</code> <code>+ realName);</code>

<code>                </code><code>System.out.println(</code><code>"Ext-字尾名:"</code> <code>+ getExt(fileName));</code>

<code>                </code><code>System.out.println(</code><code>"Type-類型:"</code> <code>+ type);</code>

<code>                </code><code>System.out.println(</code><code>"上傳路徑:"</code> <code>+ path2 + realName);</code>

<code>                </code><code>System.out.println(</code><code>"----------------------------"</code><code>);</code>

<code>                </code><code>// 下面我們将相關的資訊儲存到資料庫中去</code>

<code>                </code><code>UploadFiles uploadFiles = </code><code>new</code> <code>UploadFiles();</code>

<code>                </code><code>uploadFiles.setPath(path2 + realName);</code>

<code>                </code><code>uploadFiles.setTxt(getExt(fileName));</code>

<code>                </code><code>uploadFiles.setUploadContentType(type);</code>

<code>                </code><code>uploadFiles.setUploadFileName(fileName);</code>

<code>                </code><code>uploadFiles.setUploadRealName(realName);</code>

<code>                </code><code>Dao dao = </code><code>new</code> <code>Dao();</code>

<code>                </code><code>dao.add(uploadFiles);</code>

<code>            </code><code>// 通過dao方法根據ID值查出所對應對象的屬性,在頁面顯示出來</code>

<code>            </code><code>Dao dao = </code><code>new</code> <code>Dao();</code>

<code>            </code><code>UploadFiles ed = dao.querykById(</code><code>109</code><code>);</code><code>// 這是我測試用的id值 您的Id初始值應該為1</code>

<code>            </code><code>uploadFiles.add(ed);</code>

<code>            </code><code>System.out</code>

<code>                    </code><code>.println(uploadFiles.get(</code><code>0</code><code>).getUploadFileName() + </code><code>"&gt;&gt;&gt;&gt;&gt;"</code><code>);</code>

<code>        </code><code>} </code><code>catch</code> <code>(Exception e) {</code>

<code>            </code><code>addActionError(e.getMessage());</code>

<code>        </code><code>return</code> <code>SUCCESS;</code>

<code>    </code><code>// 本方法是截取字尾名的 不會的話百度搜尋IndexOf方法</code>

<code>    </code><code>public</code> <code>static</code> <code>String getExt(String fileName) {</code>

<code>        </code><code>return</code> <code>fileName.substring(fileName.lastIndexOf(</code><code>"."</code><code>));</code>

<code>    </code><code>//下面是get set方法</code>

<code>    </code><code>public</code> <code>File[] getUpload() {</code>

<code>        </code><code>return</code> <code>upload;</code>

<code>    </code><code>public</code> <code>void</code> <code>setUpload(File[] upload) {</code>

<code>        </code><code>this</code><code>.upload = upload;</code>

<code>    </code><code>public</code> <code>String[] getUploadContentType() {</code>

<code>    </code><code>public</code> <code>void</code> <code>setUploadContentType(String[] uploadContentType) {</code>

<code>    </code><code>public</code> <code>String[] getUploadFileName() {</code>

<code>    </code><code>public</code> <code>void</code> <code>setUploadFileName(String[] uploadFileName) {</code>

<code>    </code><code>public</code> <code>List&lt;UploadFiles&gt; getUploadFiles() {</code>

<code>        </code><code>return</code> <code>uploadFiles;</code>

<code>    </code><code>public</code> <code>void</code> <code>setUploadFiles(List&lt;UploadFiles&gt; uploadFiles) {</code>

<code>        </code><code>this</code><code>.uploadFiles = uploadFiles;</code>

<code>    </code><code>public</code> <code>String getMessage() {</code>

<code>        </code><code>return</code> <code>message;</code>

<code>    </code><code>public</code> <code>void</code> <code>setMessage(String message) {</code>

<code>        </code><code>this</code><code>.message = message;</code>

第七步:編寫下載下傳Action

<code>import</code> <code>java.io.*;</code>

<code>public</code> <code>class</code> <code>DownloadAction </code><code>extends</code> <code>ActionSupport {</code>

<code>    </code><code>private</code> <code>static</code> <code>final</code> <code>long</code> <code>serialVersionUID = 6329383258366253255L;</code>

<code>    </code><code>private</code> <code>String fileName;</code>

<code>    </code><code>private</code> <code>String fileRealName;</code>

<code>    </code><code>public</code> <code>String path;</code>

<code>    </code><code>public</code> <code>void</code> <code>setFileName() {</code>

<code>        </code><code>// 得到請求下載下傳的檔案名</code>

<code>        </code><code>String fname = ServletActionContext.getRequest().getParameter(</code><code>"name"</code><code>);</code>

<code>        </code><code>String frealname = ServletActionContext.getRequest().getParameter(</code>

<code>                </code><code>"realname"</code><code>);</code>

<code>            </code><code>/*</code>

<code>             </code><code>* 對fname參數進行UTF-8解碼,注意:實際進行UTF-8解碼時會使用本地編碼,本機為GBK。</code>

<code>             </code><code>* 這裡使用request.setCharacterEncoding解碼無效.</code>

<code>             </code><code>* 隻有解碼了getDownloadFile()方法才能在下載下傳目錄下正确找到請求的檔案</code>

<code>             </code><code>*/</code>

<code>            </code><code>fname = new String(fname.getBytes("ISO-8859-1"), "UTF-8");</code>

<code>            </code><code>frealname = new String(frealname.getBytes("ISO-8859-1"), "UTF-8");</code>

<code>        </code><code>} catch (Exception e) {</code>

<code>        </code><code>this.fileName = fname;</code>

<code>        </code><code>this.fileRealName = frealname;</code>

<code>        </code><code>// System.out.println(fileName);</code>

<code>        </code><code>// System.out.println(fileRealName);</code>

<code>    </code><code>/*</code>

<code>     </code><code>* @getFileName 此方法對應的是struts.xml檔案中的: &lt;param</code>

<code>     </code><code>* name="contentDisposition"&gt;attachment;filename="${fileName}"&lt;/param&gt;</code>

<code>     </code><code>* 這個屬性設定的是下載下傳工具下載下傳檔案時顯示的檔案名, 要想正确的顯示中文檔案名,我們需要對fileName再次編碼</code>

<code>     </code><code>* 否則中文名檔案将出現亂碼,或無法下載下傳的情況</code>

<code>    </code><code>public String getFileName() throws UnsupportedEncodingException {</code>

<code>        </code><code>fileRealName = new String(fileRealName.getBytes(), "ISO-8859-1");</code>

<code>        </code><code>return fileRealName;</code>

<code>     </code><code>* @getDownloadFile 此方法對應的是struts.xml檔案中的: &lt;param</code>

<code>     </code><code>* name="inputName"&gt;downloadFile&lt;/param&gt; 傳回下載下傳檔案的流,可以參看struts2的源碼</code>

<code>    </code><code>public</code> <code>InputStream getDownloadFile() {</code>

<code>        </code><code>this</code><code>.setFileName();</code>

<code>        </code><code>String uploadPath = ServletActionContext.getRequest().getParameter(</code>

<code>                </code><code>"path"</code><code>);</code>

<code>        </code><code>String path3 = ServletActionContext.getServletContext().getRealPath(</code>

<code>                </code><code>FILE_ROOT);</code>

<code>        </code><code>String path = uploadPath;</code>

<code>        </code><code>String path1 = (path3 + path);</code>

<code>        </code><code>File file = </code><code>new</code> <code>File(path1);</code>

<code>        </code><code>InputStream file1 = </code><code>null</code><code>;</code>

<code>            </code><code>file1 = </code><code>new</code> <code>FileInputStream(file);</code>

<code>        </code><code>} </code><code>catch</code> <code>(FileNotFoundException e) {</code>

<code>        </code><code>return</code> <code>file1;</code>

<code>    </code><code>@Override</code>

第八步:配置struts.xml和web.xml

<code>&lt;?</code><code>xml</code> <code>version</code><code>=</code><code>"1.0"</code> <code>encoding</code><code>=</code><code>"UTF-8"</code> <code>?&gt;</code>

<code>&lt;!DOCTYPE struts PUBLIC</code>

<code>    </code><code>"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"</code>

<code>    </code><code>"http://struts.apache.org/dtds/struts-2.0.dtd"&gt;</code>

<code>&lt;</code><code>struts</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>constant</code> <code>name</code><code>=</code><code>"struts.i18n.encoding"</code> <code>value</code><code>=</code><code>"utf8"</code> <code>/&gt;</code>

<code>    </code><code>&lt;</code><code>constant</code> <code>name</code><code>=</code><code>"struts.multipart.maxSize"</code> <code>value</code><code>=</code><code>"10485760"</code><code>/&gt;</code>

<code>    </code><code>&lt;</code><code>package</code> <code>name</code><code>=</code><code>"file"</code> <code>namespace</code><code>=</code><code>"/"</code> <code>extends</code><code>=</code><code>"struts-default"</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>action</code> <code>name</code><code>=</code><code>"showUpload"</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>result</code><code>&gt;/upload.jsp&lt;/</code><code>result</code><code>&gt;</code>

<code>        </code><code>&lt;/</code><code>action</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>action</code> <code>name</code><code>=</code><code>"upload"</code> <code>class</code><code>=</code><code>"org.usc.action.UploadAction"</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>result</code> <code>name</code><code>=</code><code>"input"</code><code>&gt;/upload.jsp&lt;/</code><code>result</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>result</code> <code>name</code><code>=</code><code>"success"</code><code>&gt;/download.jsp&lt;/</code><code>result</code><code>&gt;</code>

<code>                                                                                                                                                           </code> 

<code>                    </code><code>&lt;</code><code>interceptor-ref</code> <code>name</code><code>=</code><code>"fileUpload"</code><code>&gt;</code>

<code>&lt;!--大家可以設定成自己的配置,想檔案類型和大小等限制         --&gt;</code>

<code>                </code><code>&lt;</code><code>param</code> <code>name</code><code>=</code><code>"maximumSize"</code><code>&gt;2097152&lt;/</code><code>param</code><code>&gt;</code>

<code>&lt;!--             &lt;param name="allowedTypes"&gt;image/bmp,image/x-png,image/png,image/gif,image/jpeg,image/jpg,image/pjpeg&lt;/param&gt;--&gt;</code>

<code>&lt;!--             --&gt;</code>

<code>&lt;!--                 容許檔案類型為doc,ppt,xls,pdf,txt,java--&gt;</code>

<code>            </code><code>&lt;/</code><code>interceptor-ref</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>interceptor-ref</code> <code>name</code><code>=</code><code>"defaultStack"</code><code>&gt;&lt;/</code><code>interceptor-ref</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>action</code> <code>name</code><code>=</code><code>"download"</code> <code>class</code><code>=</code><code>"org.usc.action.DownloadAction"</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>result</code> <code>name</code><code>=</code><code>"success"</code> <code>type</code><code>=</code><code>"stream"</code><code>&gt;</code>

<code>                </code><code>&lt;</code><code>param</code> <code>name</code><code>=</code><code>"contentDisposition"</code><code>&gt;attachment;filename="${fileName}"&lt;/</code><code>param</code><code>&gt;</code>

<code>                </code><code>&lt;</code><code>param</code> <code>name</code><code>=</code><code>"inputName"</code><code>&gt;downloadFile&lt;/</code><code>param</code><code>&gt;</code>

<code>            </code><code>&lt;/</code><code>result</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>package</code><code>&gt;</code>

<code>&lt;/</code><code>struts</code><code>&gt;</code>

<code>&lt;?</code><code>xml</code> <code>version</code><code>=</code><code>"1.0"</code> <code>encoding</code><code>=</code><code>"UTF-8"</code><code>?&gt;</code>

<code>&lt;</code><code>web-app</code> <code>id</code><code>=</code><code>"WebApp_ID"</code> <code>version</code><code>=</code><code>"2.4"</code>

<code>    </code><code>xmlns</code><code>=</code><code>"http://java.sun.com/xml/ns/j2ee"</code> <code>xmlns:xsi</code><code>=</code><code>"http://www.w3.org/2001/XMLSchema-instance"</code>

<code>    </code><code>xsi:schemaLocation</code><code>=</code><code>"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>welcome-file-list</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>welcome-file</code><code>&gt;upload.jsp&lt;/</code><code>welcome-file</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>welcome-file-list</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>filter</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>filter-name</code><code>&gt;struts2&lt;/</code><code>filter-name</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>filter-class</code><code>&gt;org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter&lt;/</code><code>filter-class</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>filter</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>filter-mapping</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>url-pattern</code><code>&gt;/*&lt;/</code><code>url-pattern</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>filter-mapping</code><code>&gt;</code>

<code>&lt;/</code><code>web-app</code><code>&gt;</code>

第九步:編寫上傳jsp

<code>&lt;%@ page language="java" contentType="text/html; charset=utf-8"%&gt;</code>

<code>&lt;%@ taglib prefix="s" uri="/struts-tags"%&gt;</code>

<code>&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%&gt;</code>

<code>&lt;</code><code>html</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>head</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>title</code><code>&gt;upload&lt;/</code><code>title</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>head</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>body</code><code>&gt;</code>

<code>&lt;</code><code>script</code> <code>type</code><code>=</code><code>"text/javascript"</code><code>&gt;</code>

<code>&lt;!--addMore函數可以提供上傳多個檔案上傳--&gt;</code>

<code>function addMore()</code>

<code>    </code><code>var td = document.getElementById("more");</code>

<code>    </code><code>var br = document.createElement("br");</code>

<code>    </code><code>var input = document.createElement("input");</code>

<code>    </code><code>var button = document.createElement("input");</code>

<code>    </code><code>input.type = "file";</code>

<code>    </code><code>input.name = "upload";</code>

<code>    </code><code>button.type = "button";</code>

<code>    </code><code>button.value = "   删除    ";</code>

<code>    </code><code>button.onclick = function()</code>

<code>        </code><code>td.removeChild(this);</code>

<code>    </code><code>td.appendChild(br);</code>

<code>    </code><code>td.appendChild(input);</code>

<code>    </code><code>td.appendChild(button);</code>

<code>&lt;/</code><code>script</code><code>&gt;</code>

<code>        </code><code>&lt;!--&lt;h3&gt;&lt;font color="red"&gt;上傳檔案類型字尾為doc,ppt,xls,pdf,txt,java,每個檔案大小不能大于50M&lt;/font&gt;&lt;/h3&gt;--&gt;</code>

<code>        </code><code>&lt;</code><code>table</code> <code>align</code><code>=</code><code>"center"</code> <code>width</code><code>=</code><code>"50%"</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>tr</code><code>&gt;</code>

<code>                </code><code>&lt;</code><code>td</code><code>&gt;</code>

<code>                    </code><code>&lt;</code><code>s:fielderror</code> <code>cssStyle</code><code>=</code><code>"color:red"</code> <code>/&gt;</code>

<code>                </code><code>&lt;/</code><code>td</code><code>&gt;</code>

<code>            </code><code>&lt;/</code><code>tr</code><code>&gt;</code>

<code>        </code><code>&lt;/</code><code>table</code><code>&gt;</code>

<code>                                                                                                                                                 </code> 

<code>        </code><code>&lt;</code><code>s:form</code> <code>action</code><code>=</code><code>"upload.action"</code> <code>theme</code><code>=</code><code>"simple"</code> <code>method</code><code>=</code><code>"post"</code>

<code>            </code><code>enctype</code><code>=</code><code>"multipart/form-data"</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>table</code> <code>align</code><code>=</code><code>"center"</code> <code>width</code><code>=</code><code>"50%"</code> <code>border</code><code>=</code><code>"1"</code><code>&gt;</code>

<code>                </code><code>&lt;</code><code>tr</code><code>&gt;</code>

<code>                    </code><code>&lt;</code><code>td</code><code>&gt;</code>

<code>                        </code><code>上傳檔案</code>

<code>                    </code><code>&lt;/</code><code>td</code><code>&gt;</code>

<code>                    </code><code>&lt;</code><code>td</code> <code>id</code><code>=</code><code>"more"</code> <code>&gt;</code>

<code>                        </code><code>&lt;</code><code>s:file</code> <code>name</code><code>=</code><code>"upload"</code><code>&gt;&lt;/</code><code>s:file</code><code>&gt;</code>

<code>                        </code><code>&lt;</code><code>input</code> <code>type</code><code>=</code><code>"button"</code> <code>value</code><code>=</code><code>"上傳更多..."</code>                     <code>&lt;/td&gt;</code>

<code>                </code><code>&lt;/</code><code>tr</code><code>&gt;</code>

<code>                        </code><code>&lt;</code><code>s:submit</code> <code>value</code><code>=</code><code>" 确認 "</code><code>&gt;&lt;/</code><code>s:submit</code><code>&gt;</code>

<code>                        </code><code>&lt;</code><code>s:reset</code> <code>value</code><code>=</code><code>" 重置 "</code><code>&gt;&lt;/</code><code>s:reset</code><code>&gt;</code>

<code>            </code><code>&lt;/</code><code>table</code><code>&gt;</code>

<code>        </code><code>&lt;/</code><code>s:form</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>body</code><code>&gt;</code>

<code>&lt;/</code><code>html</code><code>&gt;</code>

第十步:編寫下載下傳jsp

<code>        </code><code>&lt;</code><code>title</code><code>&gt;download&lt;/</code><code>title</code><code>&gt;</code>

<code>                                                                                                                                             </code> 

<code>                                                                                                                                         </code> 

<code>        </code><code>&lt;</code><code>table</code> <code>align</code><code>=</code><code>"center"</code> <code>width</code><code>=</code><code>"50%"</code> <code>border</code><code>=</code><code>"1"</code><code>&gt;</code>

<code>                </code><code>&lt;</code><code>td</code> <code>align</code><code>=</code><code>"center"</code><code>&gt;</code>

<code>                    </code><code>檔案下載下傳</code>

<code>            </code><code>&lt;</code><code>c:forEach</code>  <code>items</code><code>=</code><code>"${uploadFiles}"</code> <code>var</code><code>=</code><code>"uploadFiles"</code><code>&gt;</code>

<code>                        </code><code>&lt;</code><code>a</code> <code>href</code><code>=</code><code>"download.action?name=${uploadFiles.uploadRealName }&amp;realname=${uploadFiles.uploadFileName }&amp;path=${uploadFiles.path}"</code><code>&gt;${uploadFiles.uploadFileName }&lt;/</code><code>a</code><code>&gt;</code>

<code>                    </code><code>&lt;</code><code>td</code><code>&gt;&lt;</code><code>img</code> <code>src</code><code>=</code><code>'/update${uploadFiles.path}'</code><code>&gt;&lt;/</code><code>td</code><code>&gt;</code><code>&lt;!--這個格式是工程名/存儲路徑   由于我的工程名字是update名字起得不好,是以大家可以自己修改 --&gt;</code>

<code>            </code><code>&lt;/</code><code>c:forEach</code><code>&gt;</code>

通路路徑:http://127.0.0.1:8080/update/upload.jsp

第十一步:測試頁面

<a href="http://blog.51cto.com/attachment/201311/174839357.png" target="_blank"></a>

第十二步:下載下傳頁面

<a href="http://blog.51cto.com/attachment/201311/175605460.png" target="_blank"></a>

本項目相容SSH架構的項目稍加修改,即可使用!如有問題請到QQ群:160243674去找我!

項目結構

<a href="http://blog.51cto.com/attachment/201311/174958813.png" target="_blank"></a>

源碼下載下傳位址:

<a href="http://down.51cto.com/data/998161" target="_blank">http://down.51cto.com/data/998161</a>

本文轉自 小夜的傳說 51CTO部落格,原文連結:http://blog.51cto.com/1936625305/1319656,如需轉載請自行聯系原作者