1 package
com.test;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.text.SimpleDateFormat;
6 import java.util.Date;
7 import java.util.Random;
8
9 import org.apache.commons.io.FileUtils;
10 import org.apache.struts2.ServletActionContext;
11 import com.opensymphony.xwork2.ActionSupport;
12
13
14 /**
15 * Action that file upload
16 * @author Luxh
17 */
18 public class FileUploadAction extends ActionSupport{
19
20 private static final long serialVersionUID = 1L ;
21
22 /**
23 * 上传的文件
24 * 该属性名称要和页面中的中的name一致
25 */
26 private File file;
27 /**文件名*/
28 private String fileFileName;
29 /**文件类型*/
30 private String fileContentType;
31
32
33 /**
34 * 上传文件
35 * @return
36 * @throws IOException
37 */
38 public String uploadFile() throws IOException {
39 if(file != null ) {
40 //获取存放文件的目录
41 String saveDir = ServletActionContext.getServletContext().getRealPath("D:/test/upload" );
42 File dirFile = new File(saveDir);
43 //如果目录不存在,就创建目录
44 if(! dirFile.exists()) {
45 dirFile.mkdir();
46 }
47
48 //获取目标文件名
49 String targetFileName = generateFileName(fileFileName);
50 //生成目标文件
51 File targetFile = new File(saveDir,targetFileName);
52 //复制文件到存放路径,FileUtils是apache旗下commons-io包中的一个工具类
53 FileUtils.copyFile(file,targetFile);
54
55 // 实际中可能需要将一些文件信息保存到数据中,比如原始文件名称、文件大小、文件存放路径等信息
56 //可调用相关的业务逻辑进行处理
57 }
58 return SUCCESS;
59
60 }
61
62
63 /**
64 * 生成新文件名
65 * @param fileName
66 * @return
67 */
68 private String generateFileName(String fileName) {
69 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss" );
70 String formatDate = sdf.format(new Date());
71 int random = new Random().nextInt(1000 );
72 int position = fileName.lastIndexOf("." );
73 String extension = fileName.substring(position);
74 return formatDate + random + extension;
75 }
76
77
78 public File getFile() {
79 return file;
80 }
81 public void setFile(File file) {
82 this.file = file;
83 }
84 public String getFileFileName() {
85 return fileFileName;
86 }
87 public void setFileFileName(String fileFileName) {
88 this.fileFileName = fileFileName;
89 }
90 public String getFileContentType() {
91 return fileContentType;
92 }
93 public void setFileContentType(String fileContentType) {
94 this.fileContentType = fileContentType;
95 }
96
97
98 }
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.text.SimpleDateFormat;
6 import java.util.Date;
7 import java.util.Random;
8
9 import org.apache.commons.io.FileUtils;
10 import org.apache.struts2.ServletActionContext;
11 import com.opensymphony.xwork2.ActionSupport;
12
13
14 /**
15 * Action that file upload
16 * @author Luxh
17 */
18 public class FileUploadAction extends ActionSupport{
19
20 private static final long serialVersionUID = 1L ;
21
22 /**
23 * 上传的文件
24 * 该属性名称要和页面中的中的name一致
25 */
26 private File file;
27 /**文件名*/
28 private String fileFileName;
29 /**文件类型*/
30 private String fileContentType;
31
32
33 /**
34 * 上传文件
35 * @return
36 * @throws IOException
37 */
38 public String uploadFile() throws IOException {
39 if(file != null ) {
40 //获取存放文件的目录
41 String saveDir = ServletActionContext.getServletContext().getRealPath("D:/test/upload" );
42 File dirFile = new File(saveDir);
43 //如果目录不存在,就创建目录
44 if(! dirFile.exists()) {
45 dirFile.mkdir();
46 }
47
48 //获取目标文件名
49 String targetFileName = generateFileName(fileFileName);
50 //生成目标文件
51 File targetFile = new File(saveDir,targetFileName);
52 //复制文件到存放路径,FileUtils是apache旗下commons-io包中的一个工具类
53 FileUtils.copyFile(file,targetFile);
54
55 // 实际中可能需要将一些文件信息保存到数据中,比如原始文件名称、文件大小、文件存放路径等信息
56 //可调用相关的业务逻辑进行处理
57 }
58 return SUCCESS;
59
60 }
61
62
63 /**
64 * 生成新文件名
65 * @param fileName
66 * @return
67 */
68 private String generateFileName(String fileName) {
69 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss" );
70 String formatDate = sdf.format(new Date());
71 int random = new Random().nextInt(1000 );
72 int position = fileName.lastIndexOf("." );
73 String extension = fileName.substring(position);
74 return formatDate + random + extension;
75 }
76
77
78 public File getFile() {
79 return file;
80 }
81 public void setFile(File file) {
82 this.file = file;
83 }
84 public String getFileFileName() {
85 return fileFileName;
86 }
87 public void setFileFileName(String fileFileName) {
88 this.fileFileName = fileFileName;
89 }
90 public String getFileContentType() {
91 return fileContentType;
92 }
93 public void setFileContentType(String fileContentType) {
94 this.fileContentType = fileContentType;
95 }
96
97
98 }
配置文件如下:
1 <!-- 设置文件上传大小限制 -->
2 <constant name="struts.multipart.maxSize" value="10000000"/>
3 <!--文件临时存放目录 -->
4 <constant name="struts.multipart.saveDir" value="D:/temp"/>
5
6 <package name="default" namespace="/" extends="struts-default">
7 <!-- 默认的全局拦截器 -->
8 <default-interceptor-ref name="defaultStack"/>
9
10
11 <!-- 文件上传 -->
12 <action name="uploadFile" class="com.test.FileUploadAction" method="uploadFile">
13 <!-- 如果配置了全局拦截器栈 defaultStack,是不需要再配置拦截器fileUpload
14 因为defaultStack中已包含fileUpload拦截器
15 -->
16 <!---->
17 <result>/WEB-INF/page/common/success.jspresult>
18 action>
19
20 package>
不建议在struts.properties文件直接修改struts的配置。
建议在struts.xml中以类似 <constant name="struts.multipart.maxSize" value="10000000"/>的形式进行配置修改。
上传页面要注意 method="post" enctype="multipart/form-data"
1 <form. action="uploadFile.action" method="post" enctype="multipart/form-data"> 2 <table cellspacing="0" cellpadding="0"> 3 <tr> 4 <td> 5 <input type="file" name="file" size="50" contentEditable="false" onChange="checkFile(this.value)"> 6 td> 7 tr> 8 <tr> 9 <td> 10 <input type="submit" value="上传"> 11 td> 12 tr> 13 table> 14 form>
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26481450/viewspace-731192/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26481450/viewspace-731192/