struts2本身并没有提供上传的插件
首先我们要建立一个com.vo包,然后建立一个EmpVo类,具体代码如下:
1 package com.vo; 2 3 import java.io.File; 4 5 public class EmpVo { 6 public File file; 7 public String fileFileName; 8 public String fileContentType; 9 public File getFile() { 10 return file; 11 } 12 public void setFile(File file) { 13 this.file = file; 14 } 15 public String getFileFileName() { 16 return fileFileName; 17 } 18 public void setFileFileName(String fileFileName) { 19 this.fileFileName = fileFileName; 20 } 21 public String getFileContentType() { 22 return fileContentType; 23 } 24 public void setFileFileContentType(String fileFileContentType) { 25 this.fileContentType = fileFileContentType; 26 } 27 28 }
在视图层显示页面应该这样写:
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%@ taglib prefix="s" uri="/struts-tags" %> 3 <form action="emp!upload.action" enctype="multipart/form-data" method="post"> 4 文件上传:<input type="file" value="浏览" name="empVo.file"><br> 5 <input type="submit" value="提交"> 6 </form>
注意这里<form>标签里面一定要加上enctype="multipart/form-data"这是处理文件上传的;name="empVo.file"这里struts2会自动将文件的内容传给EmpVo里面的file,文件名传给fileFileName,文件后缀名传给fileContentType.
com.action
1 package com.action; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 import java.io.InputStream; 9 import java.io.OutputStream; 10 11 import org.apache.struts2.ServletActionContext; 12 13 import com.service.EmpService; 14 import com.vo.EmpVo; 15 16 public class EmpAction { 17 private EmpVo empVo; 18 19 public EmpVo getEmpVo() { 20 return empVo; 21 } 22 23 public void setEmpVo(EmpVo empVo) { 24 this.empVo = empVo; 25 } 26 27 //上传 28 public String upload() throws IOException{ 29 //要上传到哪里 30 String path=ServletActionContext.getServletContext().getRealPath("/text"); 31 //得到上传内容,创建文件输入流 32 InputStream is=new FileInputStream(empVo.getFile()); 33 if(is==null){ 34 return "err"; 35 } 36 //设置目标文件 37 File toFile=new File(path,empVo.getFileFileName()); 38 //创建文件输出流 39 OutputStream os=new FileOutputStream(toFile); 40 //设置缓存 41 byte[] buffer=new byte[1024]; 42 int length=0; 43 //读取file文件输出到tofile文件中 44 while((length=is.read(buffer))>0){ 45 os.write(buffer,0,length); 46 } 47 System.out.println("上传文件名"+empVo.getFileFileName()); 48 System.out.println("上传文件类型"+empVo.getFileContentType()); 49 is.close(); 50 os.close(); 51 52 return "show"; 53 } 54 55 56 }
文件夹text要放在WebRoot下面
发布运行的时候会自动将提交的内容上传到服务器