Struts上传文件分为两个步骤:
1). 首先将客户端上传的文件保存到Struts.multipart.saveDir键所指定的目录中,如果该键所对应的目录不存在,那么就保存到javax.servlet.context.tempdir环境变量所指定的目录中。
2). Action中所定义的File类型的成员变量实际上是指向的是临时目录中的临时文件,然后在服务器端通过IO的方式将临时文件写入到指定的服务器端目录中
环境搭建:
首先看一下目录结构:
在对应的文件夹下创建以上图片中的文件
1、在com.action中新建文件上传的action,
1 package com.action; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.InputStream; 7 import java.io.OutputStream; 8 9 import org.apache.struts2.ServletActionContext; 10 11 import com.opensymphony.xwork2.ActionSupport; 12 13 @SuppressWarnings("serial") 14 public class UploadAction extends ActionSupport { 15 16 private String username; //用户名字 17 private File file; //上传的文件 18 private String fileFileName; //获取文件名字,命名格式固定为XXXFileName 19 private String fileContentType; //获取文件的内容类型格式固定为XXXContentType 20 public String getFileContentType() { 21 return fileContentType; 22 } 23 public void setFileContentType(String fileContentType) { 24 this.fileContentType = fileContentType; 25 } 26 public String getFileFileName() { 27 return fileFileName; 28 } 29 public void setFileFileName(String fileFileName) { 30 this.fileFileName = fileFileName; 31 } 32 public File getFile() { 33 return file; 34 } 35 public void setFile(File file) { 36 this.file = file; 37 } 38 public String getUsername() { 39 return username; 40 } 41 public void setUsername(String username) { 42 this.username = username; 43 } 44 @Override 45 public String execute() throws Exception { 46 //获取目标文件的路径 47 String root = ServletActionContext.getRequest().getRealPath("/upload"); 48 //创建文件输入流 49 InputStream input = new FileInputStream(file); 50 51 System.out.println("fileFileName: " + fileFileName); 52 //在root目录下创建一个名字为fileFileName的文件 53 File destFile = new File(root,fileFileName); 54 //上传的文件输出到destFile文件中 55 OutputStream out = new FileOutputStream(destFile); 56 57 byte[] buffer = new byte[1024]; 58 59 int length = 0; 60 61 while((length = input.read(buffer)) != -1){ 62 out.write(buffer,0,length); 63 } 64 65 input.close(); 66 out.close(); 67 68 return SUCCESS; 69 } 70 }