一.Struts文件上傳的思路
之前也講過(guò)了FileUpload這個(gè)組件,功能很強(qiáng)大,但是操作繁瑣復(fù)雜。這次,在Strust中也對(duì)文件上傳有所支持,并FileUpload進(jìn)行了包裝,用起來(lái)方便了許多。
這里涉及到了一個(gè)標(biāo)簽和一個(gè)類:
<html:file property="對(duì)應(yīng)ActionForm中的屬性名稱">
用這個(gè)標(biāo)簽可以上傳文件,但是要接收次內(nèi)容必須依靠org.apache.struts.upload.FormFile
接口完成。
二.實(shí)現(xiàn)
sh.jsp:
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
|
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> < html > < head > < title >sh.jsp</ title > < meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" > </ head > < body > < html:form action = "/jsp/upload.do" method = "post" enctype = "multipart/form-data" > < html:file property = "photo" ></ html:file > < html:submit value = "上傳" ></ html:submit > </ html:form > </ body > </ html > |
UploadForm.java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
package com.zyy.struts.form; import org.apache.struts.action.ActionForm; import org.apache.struts.upload.FormFile; public class UploadForm extends ActionForm { private FormFile photo; public FormFile getPhoto() { return photo; } public void setPhoto(FormFile photo) { this .photo = photo; } } |
IPTimeStamp.java:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
package com.zyy.util; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; public class IPTimeStamp { private SimpleDateFormat sdf = null ; private String ip = null ; public IPTimeStamp() { } public IPTimeStamp(String ip) { this .ip = ip; } public String getIPTimeRand() { StringBuffer buf = new StringBuffer(); if ( this .ip != null ) { String s[] = this .ip.split( "\\." ); for ( int i = 0 ; i < s.length; i++) { buf.append( this .addZero(s[i], 3 )); } } buf.append( this .getTimeStamp()); Random r = new Random(); for ( int i = 0 ; i < 3 ; i++) { buf.append(r.nextInt( 10 )); } return buf.toString(); } public String getDate() { this .sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss.SSS" ); return this .sdf.format( new Date()); } public String getTimeStamp() { this .sdf = new SimpleDateFormat( "yyyyMMddHHmmssSSS" ); return this .sdf.format( new Date()); } private String addZero(String str, int len) { StringBuffer s = new StringBuffer(); s.append(str); while (s.length() < len) { s.insert( 0 , "0" ); } return s.toString(); } public static void main(String args[]) { System.out.println( new IPTimeStamp( "192.168.1.1" ).getIPTimeRand()); } } |
UploadAction.java:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
package com.zyy.struts.action; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.zyy.struts.form.UploadForm; import com.zyy.util.IPTimeStamp; public class UploadAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { UploadForm uploadForm = (UploadForm) form; IPTimeStamp ips = new IPTimeStamp(request.getRemoteAddr()); // 文件名 String fileName = ips.getIPTimeRand() + "." + uploadForm.getPhoto().getFileName().split( "\\." )[uploadForm .getPhoto().getFileName().split( "\\." ).length - 1 ]; // 輸出路徑 File outFile = new File( super .getServlet().getServletContext() .getRealPath( "/" ) + "upload" + File.separator + fileName); // 存放圖片的文件夾 File file = new File( super .getServlet().getServletContext() .getRealPath( "/" ) + "upload" ); if (!file.exists()) { file.mkdir(); } InputStream input = uploadForm.getPhoto().getInputStream(); OutputStream output = new FileOutputStream(outFile); byte data[] = new byte [ 1024 ]; int temp = 0 ; while ((temp = input.read(data, 0 , 1024 )) != - 1 ) { output.write(data); } output.close(); input.close(); return null ; } } |
struts-config.xml:
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
|
<? xml version = "1.0" encoding = "ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> < struts-config > < form-beans > < form-bean name = "uploadForm" type = "com.zyy.struts.form.UploadForm" ></ form-bean > </ form-beans > < global-exceptions > </ global-exceptions > < global-forwards > </ global-forwards > < action-mappings > < action path = "/jsp/upload" attribute = "uploadForm" input = "/jsp/sh.jsp" name = "uploadForm" scope = "request" type = "com.zyy.struts.action.UploadAction" > </ action > </ action-mappings > < message-resources parameter = "resource.MessageResources" /> </ struts-config > |
由于我保存在的是super.getServlet().getServletContext().getRealPath("/")+ "upload"
這是虛擬目錄的真實(shí)路徑的upload文件夾下。
由此可見(jiàn),在Struts中的文件上傳原理和FileUpload一樣,但是Struts進(jìn)行了包裝,所以用起來(lái)明顯比單獨(dú)用FileUpload組件方便了許多。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。