struts2上传文件及多文件上传
1. struts2中的文件上传?
第一步:在WEB=INF/lib下加入commons-fileupload-1.2.1.jar , commons-io-1.3.2.jar。?
第二步:把form表单的enctype属性设置为"multipart/form-data",如?
?Java代码?
- <form?action="${pageContext.request.contextPath}/control/employee/list_execute.action"?enctype="multipart/form-data"?method="post">??
- ????文件:<input?type="file"?name="image">??
- ????<input?type="submit"?value="上传"/>??
- ??</form>??
- ??//${pageContext.request.contextPath}:获取服务器根路径??
第三步:在action中添加一下属性,?
Java代码?
- public?class?HelloWorldAction?{??
- ????private?File?image;???????????//与jsp表单中的名称对应??
- ????private?String?imageFileName;?//FileName为固定格式??
- ????private?String?imageContentType?;//ContentType为固定格式??
- ??????
- ????public?String?getImageContentType()?{??
- ????????return?imageContentType;??
- ????}??
- ????public?void?setImageContentType(String?imageContentType)?{??
- ????????this.imageContentType?=?imageContentType;??
- ????}??
- ????public?String?getImageFileName()?{??
- ????????return?imageFileName;??
- ????}??
- ????public?void?setImageFileName(String?imageFileName)?{??
- ????????this.imageFileName?=?imageFileName;??
- ????}??
- ????public?File?getImage()?{??
- ????????return?image;??
- ????}??
- ????public?void?setImage(File?image)?{??
- ????????this.image?=?image;??
- ????}??
- ????public?String?execute()?throws?Exception{??
- System.out.println("imageFileName?=?"+imageFileName);?????
- System.out.println("imageContentType?=?"+imageContentType);??
- ????????//获取服务器的根路径realpath??
- ????????String?realpath?=?ServletActionContext.getServletContext().getRealPath("/images");??
- System.out.println(realpath);??
- ????????if(image!=null){??
- ????????????File?savefile?=?new?File(new?File(realpath),?imageFileName);??
- ????????????if(!savefile.getParentFile().exists())?savefile.getParentFile().mkdirs();??
- ????????????FileUtils.copyFile(image,?savefile);??
- ????????????ActionContext.getContext().put("message",?"上传成功");??
- ????????}else{??
- ????????????ActionContext.getContext().put("message",?"上传失败");??
- ????????}??
- ????????return?"success";??
- ????}??
- }??
此外,可以在struts.xml中配置上传文件的大小?
??? <constant name="struts.multipart.maxSize" value="10701096"/> //最大上传配置成10M?
??? 默认的上传大小为2M?
思维拓展:如果要上传的文件非常大,如上传的是电影,好几百M ,用web上传一般是不可能难上传成功的,这时候要安装一个插件,类似于应用程序?
????????? socket ,通过网络通讯上传。?
2 . 多文件上传?
??? 在上面的基础上略加改动?
??? 1.jsp表单?
?Java代码?
- <form?action="${pageContext.request.contextPath}/control/employee/list_execute.action"?enctype="multipart/form-data"?method="post">??
- ????文件1:<input?type="file"?name="image"><br/>??
- ????文件2:<input?type="file"?name="image"><br/>??
- ????文件3:<input?type="file"?name="image"><br/>??
- ????<input?type="submit"?value="上传"/>??
- ??</form>??
?Java代码?
- ??public?class?HelloWorldAction?{??
- ????private?File[]?image;??
- ????private?String[]?imageFileName;??
- ????private?String[]?imageContentType?;??
- ????//省略了set和get方法??
- ????public?String?execute()?throws?Exception{??
- ??????????
- ????????String?realpath?=?ServletActionContext.getServletContext().getRealPath("/images");??
- ????????System.out.println(realpath);??
- ????????if(image!=null){??
- ????????????File?savedir?=?new?File(realpath);??
- ????????????if(!savedir.exists())??
- ???????????????{???
- ??????????????????savedir.mkdirs();??
- ???????????????}??
- ????????System.out.println("image.length?=?"+image.length);??
- ????????????for(int?i?=?0?;?i<image.length?;?i++){??
- ??????????????????
- System.out.println("imageContentType["+i+"]?=?"+imageContentType[i]);??
- ????????????????File?savefile?=?new?File(savedir,?imageFileName[i]);??
- ????????????????FileUtils.copyFile(image[i],?savefile);??
- ????????????}??
- ????????????ActionContext.getContext().put("message",?"上传成功");??
- ????????}??
- ????????return?"success";??
- ????}??
- } ?