struts2的文件上传是用拦截器实现的,我们可以不用去关心底层的实现,使得上传文件变得很简单。
Action代码:
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 * 该属性名称要和页面中的<input type="file" name="file">中的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 }