struts2 和 commons-fileupload2.1 结合使用

昨天分析了很多错误,今天将正确的配置发布如下:
首先struts.properties中需要设置
struts.i18n.encoding=UTF-8
struts.locale=zh_CN
struts.multipart.saveDir=\temp
struts.multipart.maxSize=100000000
saveDir是struts2自带的上传功能,能够将附件临时保存在temp目录中。maxSize是附件大小,超过这个讲抛出异常。
使用了struts2自带的功能后,在上传时其实是不需要再次通过fileupload来获取。具体代码见下

request.setCharacterEncoding("UTF-8");
LoadPath loadPath = new LoadPath();
String rootPath = loadPath.getRootPath();
String path = "upload";
String fileName = "";
Util u = new Util();
// 判断有没有这个日期目录
String currData = u.getSysDate("yyyyMMdd");
// 判断目录在不,如果不在那么就添加一个目录
path = path + "/" + currData;
File dir = new File(path);
if (!dir.exists()) {
// 不存在,需要创建目录
try {
dir.mkdir();
this.log("创建目录:" + dir);
} catch (Exception ex) {
log.error("创建目录:" + path + "失败,原因:" + ex.toString());
}
}

try {
MultiPartRequestWrapper mrw = (MultiPartRequestWrapper)request;
Enumeration<String> mu = mrw.getFileParameterNames();
while(mu.hasMoreElements()){
String name = mu.nextElement();
System.out.println(request.getContentLength());
File[] files = mrw.getFiles(name);
String[] fileNames = mrw.getFileNames(name);
for(int i=0;i<files.length;i++){
File file = files[i];
fileName = fileNames[i];
//保存file文件
String oldName = fileName.substring(0, fileName
.lastIndexOf("."));//旧文件名
String fileNameAtt = fileName.substring(fileName
.lastIndexOf(".") + 1, fileName.length());// 文件后缀名
long time = System.currentTimeMillis();
String newName = time + "." + fileNameAtt;
long size = file.length();
if (file.exists()) { // 文件存在时
FileInputStream fis=new FileInputStream(file);
path += "/"+newName;
FileOutputStream fs = new FileOutputStream(rootPath +"/"+ path);
byte[] buf = new byte[1024];
int c;
while((c = fis.read(buf))!=-1)//返回实际读取到的大小
{
fs.write(buf,0,c);
}
fs.flush(); //刷新缓冲区,记得
fs.close();
fis.close();
}
AppContext.getWySysFileManagerLogic().save(oldName, time+"", path, Integer.parseInt(size+""));
}

}
} catch (Exception e) {
e.printStackTrace();
log.info("文件上传失败!");
}

从上面可以看出,使用了MultiPartRequestWrapper mrw = (MultiPartRequestWrapper)request;来获取了上传附件的request.那么就可以获取到上传请求值,后来发现这个方法比其upload方法来说简单点。也可以获取到附件大小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值