自己写了一个工具类 方便获取上传文件的相关数据
public class FileUploadUtil {
/**
* 获取上传文件的扩展名
*/
private static String getFileExt(String fileName){
return FilenameUtils.getExtension(fileName);
}
/**
* 用uuid随机生成名字,加上扩展名返回文件新名字
*/
private static String newFileName(String fileName){
String ext = getFileExt(fileName);
return UUID.randomUUID().toString() + "." + ext;
}
/**
* 从配置文件中获取要上传的文件路径
*/
public static String getPath(String uploadType){
// 配置文件在src下获取配置文件路径
InputStream path = FileUploadUtil.class.getClassLoader().getResourceAsStream("sys.properties");
Properties prop = new Properties();
try {
prop.load(path);
System.out.println(prop.getProperty("ImgUrl"));
} catch(IOException e) {
e.printStackTrace();
}
return prop.getProperty(uploadType);
}
/**
* 获取与服务器同级的上传文件路径
*/
public static String getUploadFilePath(String uploadType){
HttpServletResponse response = ServletActionContext.getResponse();
HttpServletRequest request = ServletActionContext.getRequest();
response.setCharacterEncoding("utf-8");
String path = request.getSession().getServletContext().getRealPath(""); // 项目路径
path = path.substring(0,path.lastIndexOf(File.separator)); // 项目上一级路径
String url ="/"+getPath(uploadType);
Date date = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
url += df.format(date);// 文件夹--日期
url += "/";
return path+url;
}
/**
* 实现文件上传的功能,返回上传后新的文件路径
*/
/*public static String uploadFile(UploadFile fileImage , String uploadType){
String filePath = getUploadFilePath(uploadType);
File f2 = new File(filePath);
if (!f2.exists()) {
f2.mkdirs();
}
File file = null;
String picNewName = "";
do {
//获取文件新名字
picNewName = newFileName(fileImage.getFileName());
file = new File( filePath + picNewName);
} while (file.exists());
try {
FileUtil.copyFile(fileImage.getFile(), file);
//第一个参数是上传的文件,第二个参数是将文件拷贝
return filePath + picNewName;
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
fileImage.getFile().delete();
}
}*/
}
Parameters 类从struts上传的文件中取得fileFileName,fileContentType,file三个参数,放入map集合中
public class Parameters {
/**
* 获取参数 struts2特有的属性的fileFileName fileContentType file
*
* @param fileFileName
* 文件名称
* @param fileContentType
* 文件类型
* @param file
* 上传的文件
*/
public static Map<String, Object> getUploadParameters() {
Map<String, Object> m = new HashMap<String, Object>();
ActionContext context = ActionContext.getContext();
Set set = context.getParameters().keySet();
Iterator ite = set.iterator();
while (ite.hasNext()) {
Object men = ite.next();
Object[] param = (Object[]) context.getParameters().get(
men.toString());
if (param.length > 1) {
String para = "";
for (int i = 0; i < param.length; i++) {
if (i == param.length - 1) {
para += param[i];
} else {
para += param[i] + ",";
}
}
m.put(men.toString(), para);
} else {
m.put(men.toString(), param[0]);
}
}
return m;
}
}
fileUpload方法将文件上传,返回存放路径
public String fileUpload(){
String path = FileUploadUtil.getUploadFilePath("sys.properties下的某一参数");
//用FileUploadUtil 类中的getUploadFilePath方法是为了获取要上传到某一位置的路径
File f2 = new File(path);
if (!f2.exists()) {
f2.mkdirs();
}
Map<String, Object> map = Parameters.getUploadParameters();
File f = (File) map.get("file");
String fileName = (String) map.get("fileFileName");
if(fileName!=null && !fileName.equals("")){
File file = new File( path + fileName);
CopyFileUtil.copyFile(f.getPath(),file.getPath(), true);
f.delete();
return path + fileName;
}else{
return "";
}
}
在上传文件时,有些文件会为null 可能是因为文件大小超过struts的默认大小,修改strhts2的配置即可
<!-- 修改系统上传文件大小 默认5M -->
<constant name="struts.multipart.maxSize" value="1073741824"/>
<!-- 1G=1024*1024*1024 -->
<action name="UploadFile" class="com.buptisc.srpms.action.UploadFileAction">
<interceptor-ref name="fileUpload">
<!-- 修改上传文件大小 默认2M -->
<param name="maximumSize">1070000000</param>
</interceptor-ref>
</action>
在这里maximumSize需要小于struts.multipart.maxSize