Struts2文件上传--上传图片文件

来源:互联网 发布:国培网络研修心得体会 编辑:程序博客网 时间:2024/04/29 23:16

原文地址:http://xiaotao-2010.iteye.com/blog/1059818


前天项目中需要用到一个图片上传的功能,本来以为就是一个简单的对文件对象的一个流操作,非常简单。但着手开始写的时候才发现,以前了解的文件的上传和下载是基于Servlet实现对流文件的操作,本次项目中的控制器使用的Struts2,难道让允许在众多Action中夹杂上Servlet?即使我能做到这也不符合项目规约,记得以前在学习Struts2的时候提到过Struts2的几个核心jar包中就包括文件上传下载的jar包,但是从来没有用过。第一直觉就是去查Struts2的官方文档,但找了半天没有找到Struts2的AIP,网上大多数都Struts2的API就是将Struts2的官方文档转换成了chm格式。知道了Struts2有个文件上传下载的包,没用过,本来很简单的东西瞬间又变成的很复杂的东西。又开始了在网上的寻找。。。 

不过功夫还是不负有心人,看了N多资料后。。。有了点自己小小的总结。 
Struts2提供的文件上传下载确实呗简单。。。。 
就以图片上除为例子: 
核心代码就 3 句,其他全是围绕这3句核心代码写的,还有相应的geter和seter 

Java代码  收藏代码
  1. //1、得到图片将要写入的路径  
  2.     String realPath = ServletActionContext.getServletContext().getRealPath("/images");//实际路径  

Java代码  收藏代码
  1. //2、创建一个在此路径下的文件  
  2. File saveFile = new File(new File(realPath),fileTestFileName);  //在该实际路径下实例化一个文件  

Java代码  收藏代码
  1. //3、将上传文件复制到以上实例化的文件中,这部可能会抛出异常需要捕获  
  2. FileUtils.copyFile(fileTest, saveFile);  




Java代码  收藏代码
  1. package com.ibm.action;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5.   
  6. import org.apache.commons.io.FileUtils;  
  7. import org.apache.struts2.ServletActionContext;  
  8.   
  9. import com.opensymphony.xwork2.ActionSupport;  
  10.   
  11. public class Upload extends ActionSupport{  
  12.     private File fileTest;      //接收这个上传的文件  
  13.     private String fileTestFileName;     //Struts2提供的格式,在文件名后+FileName就是上传文件的名字  
  14.     public File getFileTest() {  
  15.         return fileTest;  
  16.     }  
  17.     public void setFileTest(File fileTest) {  
  18.         this.fileTest = fileTest;  
  19.     }  
  20.     public String getFileTestFileName() {  
  21.         return fileTestFileName;  
  22.     }  
  23.     public void setFileTestFileName(String fileTestFileName) {  
  24.         this.fileTestFileName = fileTestFileName;  
  25.     }  
  26.       
  27.     @Override  
  28.     public String execute() throws Exception {  
  29.         String[] str = { ".jpg"".jpeg"".bmp"".gif" };  
  30.         //限定文件大小是4MB  
  31.         if(fileTest==null || fileTest.length()>4194304 ){  
  32.             return "imageError";  
  33.         }  
  34.         for (String s : str) {  
  35.             if (fileTestFileName.endsWith(s)) {  
  36.                 String realPath = ServletActionContext.getServletContext().getRealPath("/images");//实际路径  
  37.                 File saveFile = new File(new File(realPath),fileTestFileName);  //在该实际路径下实例化一个文件  
  38.                 //判断父目录是否存在  
  39.                 if(!saveFile.getParentFile().exists()){  
  40.                     saveFile.getParentFile().mkdirs();  
  41.                 }  
  42.                 try {  
  43.                     //执行文件上传  
  44.                     //FileUtils 类名 org.apache.commons.io.FileUtils;  
  45.                     //是commons-io包中的,commons-fileupload 必须依赖 commons-io包实现文件上次,实际上就是将一个文件转换成流文件进行读写  
  46.                     FileUtils.copyFile(fileTest, saveFile);  
  47.                       
  48.                 } catch (IOException e) {  
  49.                     return "imageError";  
  50.                 }  
  51.             }  
  52.         }  
  53.         return "imageSuccess";  
  54.     }  
  55.   
  56. }  

原创粉丝点击