总的说图片上传有两种方式,一种是把图片文件写到数据库中,另一种是存到服务器文件目录中。写到数据库中的图片文件需要转换成二进制流的格式,占用数据库空间比较,适合少量图片的存储,比如说,系统中某些小图标,写到数据库中的优点是比较安全,不容易被用户不小心删除。
在struts2中实现(以图片上传为例)
1.FileUpload.jsp代码清单如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<%@ page language= "java" import = "java.util.*" pageEncoding= "utf-8" %>
<%@ taglib prefix= "s" uri= "/struts-tags" %>
<html>
<head>
<title>The FileUplaodDemo In Struts2</title>
</head>
<body>
<s:form action= "fileUpload" method= "post" enctype= "multipart/form-data" namespace= "/" >
<s:file name= "myFile" label= "MyFile" ></s:file>
<s:textfield name= "caption" label= "Caption" ></s:textfield>
<s:submit label= "提交" ></s:submit>
</s:form>
</body>
</html>
|
2.ShowUpload.jsp的功能清单如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<%@ page language= "java" import = "java.util.*" pageEncoding= "utf-8" %>
<%@ taglib prefix= "s" uri= "/struts-tags" %>
<html>
<head>
<title>ShowUpload</title>
</head>
<body>
<div style = "padding: 3px; border: solid 1px #cccccc; text-align: center" >
<img src = "UploadImages/<s:property value =" imageFileName "/> " />
<br />
<s:property value = "caption" />
</div >
</body>
</html>
|
3.FileUploadAction.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.chris;
import java.io.*;
import java.util.Date;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class FileUploadAction extends ActionSupport{
private static final long serialVersionUID = 572146812454l ;
private static final int BUFFER_SIZE = 16 * 1024 ;
//注意,文件上传时<s:file/>同时与myFile,myFileContentType,myFileFileName绑定
//所以同时要提供myFileContentType,myFileFileName的set方法
private File myFile; //上传文件
private String contentType; //上传文件类型
private String fileName; //上传文件名
private String imageFileName;
private String caption; //文件说明,与页面属性绑定
public void setMyFileContentType(String contentType) {
System.out.println( "文件类型 : " + contentType);
this .contentType = contentType;
}
public void setMyFileFileName(String fileName) {
System.out.println( "文件名称 : " + fileName);
this .fileName = fileName;
}
public void setMyFile(File myFile) {
this .myFile = myFile;
}
public String getImageFileName() {
return imageFileName;
}
public String getCaption() {
return caption;
}
public void setCaption(String caption) {
this .caption = caption;
}
private static void copy(File src, File dst) {
try {
InputStream in = null ;
OutputStream out = null ;
try {
in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);
out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);
byte [] buffer = new byte [BUFFER_SIZE];
while (in.read(buffer) > 0 ) {
out.write(buffer);
}
} finally {
if ( null != in) {
in.close();
}
if ( null != out) {
out.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static String getExtention(String fileName) {
int pos = fileName.lastIndexOf( "." );
return fileName.substring(pos);
}
@Override
public String execute() {
imageFileName = new Date().getTime() + getExtention(fileName);
File imageFile = new File(ServletActionContext.getServletContext().getRealPath( "UploadImages" ) + "/" + imageFileName);
copy(myFile, imageFile);
return SUCCESS;
}
}
|
注:此时仅为方便实现Action所以继承ActionSupport,并Overrider execute()方法
在struts2中任何一个POJO都可以作为Action
4.struts.xml清单如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
<?xml version= "1.0" encoding= "UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd" >
<struts>
< package name= "example" namespace= "/" extends = "struts-default" >
<action name= "fileUpload" class = "com.chris.FileUploadAction" >
<interceptor-ref name= "fileUploadStack" />
<result>/ShowUpload.jsp</result>
</action>
</ package >
</struts>
|
5.web.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
|
<?xml version= "1.0" encoding= "UTF-8" ?>
<web-app version= "2.4"
xmlns= "http://java.sun.com/xml/ns/j2ee"
xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http: //java.sun.com/xml/ns/j2ee
http: //java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter >
<filter-name > struts-cleanup </filter-name >
<filter- class >
org.apache.struts2.dispatcher.ActionContextCleanUp
</filter- class >
</filter >
<filter-mapping >
<filter-name > struts-cleanup </filter-name >
<url-pattern > /* </url-pattern >
</filter-mapping >
<filter>
<filter-name>struts2</filter-name>
<filter- class >org.apache.struts2.dispatcher.FilterDispatcher</filter- class >
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>Index.jsp</welcome-file>
</welcome-file-list>
</web-app>
|
以上内容是小编给大家介绍的Java struts2中如何实现图片上传的全部内容,希望大家喜欢。