【Struts2】文件的上传与上传权限的控制

来源:互联网 发布:js escape html 编辑:程序博客网 时间:2024/05/16 07:55
  1. package test;  
  2.   
  3. //用到了输入流,必须的支持  
  4. import java.io.*;  
  5.   
  6. //这个是为了取出Upload这个文件夹的绝对路径  
  7. import org.apache.struts2.ServletActionContext;  
  8.   
  9. //这是Struts2必要的支持  
  10. import com.opensymphony.xwork2.ActionSupport;  
  11.   
  12. //防止报序列号警告  
  13. @SuppressWarnings("serial")  
  14. //Struts2必须继承这个类  
  15. public class upload extends ActionSupport {  
  16.     //上传文件Action固有的两个属性fileContentType不是必须的  
  17.     //但一定要设置好getter与setter,这是Struts2固有的特点。  
  18.     //设置完getter与setter一定不可以在执行方法中再次初始化,如String xx=  
  19.     //这样前台会取不值的!  
  20.     private File file;  
  21.     private String fileFileName;  
  22.     //saveFileName是保存到服务器的名字  
  23.     //利用传来过的文件的后缀名+时间戳构造,  
  24.     //必要时还可以补上用户名  
  25.     private String saveFileName;  
  26.     //这是文件的大小,主要是为了传到前台  
  27.     private String fileLength;  
  28.     private String errMsg;  
  29.   
  30.     //防止输入输出流报警告  
  31.     @SuppressWarnings("resource")  
  32.     public String run() throws Exception {  
  33.         //对错误信息字符串赋予""值,否则会返回前台一个null  
  34.         errMsg = "";  
  35.         //判断是否符合上传的条件  
  36.         boolean canUpload = true;  
  37.         //取出Upload的绝对路径  
  38.         String saveFilePath = ServletActionContext.getServletContext()  
  39.                 .getRealPath("/Upload");  
  40.         //取出上传文件的后缀名  
  41.         String fileExtensions = getFileFileName().substring(  
  42.                 getFileFileName().lastIndexOf("."));  
  43.   
  44.         //根据后缀名判断是否能上传  
  45.         if (!(fileExtensions.equals(".gif") || fileExtensions.equals(".png")  
  46.                 || fileExtensions.equals(".jpeg")  
  47.                 || fileExtensions.equals(".jpg") || fileExtensions  
  48.                     .equals(".bmp"))) {  
  49.             errMsg += "上传文件只能是图片,后缀名必须是bmp,gif,jpg,jpeg!";  
  50.             canUpload = false;  
  51.         }  
  52.   
  53.         //根据文件大小判断是否能上传  
  54.         if (file.length() > (2 * 1024 * 1024)) {  
  55.             errMsg += "上传文件太大,请少于2M!";  
  56.             canUpload = false;  
  57.         }  
  58.         //把文件大小转化成字符串,推回给前台  
  59.         fileLength = (file.length() / 1024) + "KB";  
  60.       
  61.   
  62.         //如果可以上传  
  63.         if (canUpload) {  
  64.             //就营造一个服务器上的文件名  
  65.             saveFileName = System.currentTimeMillis() + fileExtensions;  
  66.             //输出流是保存到服务器的输出流  
  67.             FileOutputStream fos = new FileOutputStream(saveFilePath + "/"  
  68.                     + saveFileName);  
  69.             //输入流就是传过来的文件  
  70.             FileInputStream fis = new FileInputStream(getFile());  
  71.             //缓冲数组  
  72.             byte[] buffer = new byte[1024];  
  73.             int len = 0;  
  74.             //输入流不停读东西到缓冲数组,直到读完  
  75.             while ((len = fis.read(buffer)) > 0) {  
  76.                 //输出流不停把缓冲数组的东西的东西写到服务器上Upload的绝对目录上面  
  77.                 fos.write(buffer, 0, len);  
  78.             }  
  79.             //返回struts.xml一个成功结果  
  80.             return "success";  
  81.         } else {  
  82.             return "error";  
  83.         }  
  84.     }  
  85.   
  86.     //所有静态成员必须有getter与setter,否则不能与前台交互  
  87.     public File getFile() {  
  88.         return file;  
  89.     }  
  90.   
  91.     public void setFile(File file) {  
  92.         this.file = file;  
  93.     }  
  94.   
  95.     public String getFileFileName() {  
  96.         return fileFileName;  
  97.     }  
  98.   
  99.     public void setFileFileName(String fileFileName) {  
  100.         this.fileFileName = fileFileName;  
  101.     }  
  102.   
  103.     public String getSaveFileName() {  
  104.         return saveFileName;  
  105.     }  
  106.   
  107.     public void setSaveFileName(String saveFileName) {  
  108.         this.saveFileName = saveFileName;  
  109.     }  
  110.   
  111.     public String getErrMsg() {  
  112.         return errMsg;  
  113.     }  
  114.   
  115.     public void setErrMsg(String errMsg) {  
  116.         this.errMsg = errMsg;  
  117.     }  
  118.   
  119.     public String getFileLength() {  
  120.         return fileLength;  
  121.     }  
  122.   
  123.     public void setFileLength(String fileLength) {  
  124.         this.fileLength = fileLength;  
  125.     }  
  126.   

0 0
原创粉丝点击