后台管理——图片上传
项目中用到了上传图片,但是相比于之前做过的上传图片还有所不同,这次上传的个数的不定的,所以,后台的处理需要做到很细致的处理。
一、上传页面设置
在页面通过form提交数据的时候一定要注意,在form里有一个属性是enctype这个属性用来规定在发送到服务器之前应该如何对表单数据进行编码。默认地,表单数据会编码为 "application/x-www-form-urlencoded"。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值)。
multipart/form-data不对字符编码,在使用包含文件上传控件的表单时,必须使用该值。在这次的开发的过程中又多次的忘记写这个属性造成了,struts2报错找不到相应的页面。
text/plain空格转换为 "+" 加号,但不对特殊字符编码。
二、后台处理
List <String>listFileName = new ArrayList(30);//存储新命名的文件名
listcpyc = new ArrayList<XbConCpyc>();
String targetDirectory = ServletActionContext.getServletContext().getRealPath("/img/cpyc");//设置文件上传存储的路径
//获取日期,用日期来命名文件。
Date now = new Date();
Long tim = now.getTime();
Timestamp nowtime = new Timestamp(tim);
String nowdate = nowtime.toString();
nowdate = nowdate.substring(2, 20).replaceAll("-", "").replaceAll(" ","").replaceAll(":", "").replace(".", "");
if(upload!=null){//验证上传的文件List是否为空
for (int i = 0; i < upload.size(); i++) {
if(upload.get(i)!=null){
String filename= nowdate+i+".jpg";//对图片重命名,全部转换为.jpg格式的图片
File target = new File(targetDirectory, filename);
try {
FileUtils.copyFile(upload.get(i), target);
} catch (IOException e) {
e.printStackTrace();
}
listFileName.add(filename);
}
else{//为List中空对象文件名,特殊处理,在下民更新数据库的时候作为判断依据
listFileName.add("1");
}
}
}
上传文件的struts实现了功能,我们只要调用它的方法就可以了,
① FileUtils.copyFile(upload.get(i), target),upload为上传的文件,target是我们自己声明的文件,用来存储上传的文件。
② Upload 在action中命名的变量名要与页面上<input type=”file” name=”upload”>的name一样,否则action中的get、set方法得不到值。
③ 这次上传图片的时候无论上传的图片为什么格式,都硬性的转换为.jpg格式, 当在上传其他格式文件的时候一定要注意。