文件上传说白了就是利用form表单request域中上传数据,后台到Action中解析request域进行文件获取和文件类型以及后缀解析,过程比较繁琐,不过这些公共的繁琐步骤是struts框架已经为我们做好了,只需要按照其规则进行页面绘制和后台属性注入即可
1、form表单必须为method="post" enctype="multipart/form-data",得有file标签
<input type="file" name="upload" />
2、action中定义拦截器规定名字的属性,File类型的属性用于接收上传的文件内容,文件名得和form表单中的file类型标签的name一致,后面两个属性是struts拦截器用的用于存放文件名和文件类型的,省得自己再去解析了,要求就是前部分和form表单的name一致,后半部分以FileName结尾或以ContentType结尾
3、在相应Action的方法中就可以直接获取文件内容和后缀以及文件名进行保存使用,如
if(uploadFileName != null){ // 打印 System.out.println("文件类型:"+uploadContentType); // 把文件的名称处理一下 String uuidname = UploadUtils.getUUIDName(uploadFileName); // 把文件上传到D:\apache-tomcat-7.0.52\webapps\upload String path = "D:\apache-tomcat-7.0.52\webapps\upload\"; // 创建file对象 File file = new File(path+uuidname); // 简单方式 FileUtils.copyFile(upload, file); //import org.apache.commons.io.FileUtils;工具类 xxxService.save(pojo); //同时记得把文件保存到图床的位置还得保存到对应实体的img字段中,不然回显不了图片 }
4、默认struts图片上传会有大小限制,默认为2M,如果想上传更大点,可以自己配置常量
5、上传类型限制,需要自己在fileupload拦截器中注入属性值,如果使用的是默认拦截器栈struts-default,那么在Action的配置文件中,把默认拦截器栈引入过来,指定要修改默认拦截器栈中哪一个拦截器,具体如下,此例为简单配置,如果很多action使用了图片上传,那么最好配置成功通用的拦截器栈来继承: