1. struts2中的文件上传
第一步:在WEB=INF/lib下加入commons-fileupload-1.2.1.jar , commons-io-1.3.2.jar。
第二步:把form表单的enctype属性设置为"multipart/form-data",如
- <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中添加一下属性,
- 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表单
- <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>
- 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";
- }
- }