struts2+ajax+DB 图片上传

来源:互联网 发布:淘宝客服忙不忙 编辑:程序博客网 时间:2024/05/01 12:26

        因为项目需要做了一个简单的使用struts2的图片上传,使用ajax来进行后台提交,进而判断图片的格式,大小,是否符合要求,在存入数据库。当上传新的图片以后,会对旧文件进行删除,同时将删除数据库中相应的数据,在重新插入一条新数据。

具体的代码如下:

java代码

public class UploadAction extends ActionSupport{

 private static final long serialVersionUID = 1L;
 private File image;//上传的文件
 private String imageFileName;//文额件名称
 private String imageContentType;//文件类型
 private String message;//文件上传提示
 private String car_pers_id ;//页面传参驾驶员或者车辆的ID
 private String carOrDeiver;//页面传参区分是驾驶员还是车辆
 //可上传的图片类型
 private String[] imageTypes = {"image/png","image/gif","image/jpeg","image/jpg"};
 //可上传文件的大小
 private long maxSize= 1024*1024*3;
 //修改文件名以后存入数据库的地址
 private String pathName;

getter() and setter()-------
 
 private String imgId = getIDByUUID();
 
 
 public String execute() throws Exception{
  if(image != null){
   String path = "";
   if((message=createFile(carOrDeiver)).equals("picSuccess")){
    path = delFilePath(car_pers_id, carOrDeiver);
    delTab(car_pers_id, carOrDeiver);
    istTab(car_pers_id, carOrDeiver,pathName);
    delFile(path);
   }
  }else{
   message = "picNull";
  }
  System.out.println(message);
  return message;
 }
 //图片上传
 public String createFile (String carOrDriver) throws Exception{
  String msg = null;
  String tempPath = "/images";
  if("car".equals(carOrDriver)){
   tempPath = "/images/car/";
  }else if("driver".equals(carOrDriver)){
   tempPath = "/images/pers/";
  }
  String path = ServletActionContext.getServletContext().getRealPath(tempPath);
  String isNull = judegImageNull(image);
  if(!"picNull".equals(isNull)){
   String isFormate = judegImgFormate(imageContentType);
   if(!"picModel".equals(isFormate)){
    String isMaxSize = judegImageSize(image);
    if(!"picBeyond".equals(isMaxSize)){
     String monthPath = createPath();
     path += "\\"+monthPath;
     System.out.println("path:"+path);
     String imageNewName =  imgId + imageFileName.substring(imageFileName.lastIndexOf("."));
     pathName = monthPath+"\\"+imageNewName;
     System.out.println("imageNewName:"+imageNewName);
     System.out.println("pathName:"+pathName);
     File saveFile = new File(new File(path),imageNewName);
     if(!saveFile.getParentFile().exists()){
      saveFile.getParentFile().mkdirs();
     }
     FileUtils.copyFile(image, saveFile);
     msg = "picSuccess";
    }else{
     msg = isMaxSize;
    }
   }else{
    msg = isFormate;
   }
  }else{
   msg = isNull;
  }
  return msg;
 }
 
 //判断上传文件是否是规定的文件格式
 private String judegImgFormate(String imageContentType){
  String msg = null;
  int count=0;
  for (int i = 0; i < imageTypes.length; i++) {
   if(!imageContentType.equals(imageTypes[i])){
    count++;
   }
  }
  if(count==4){
   msg = "picModel";
   System.out.println(msg);
   return msg;
  }else{
   msg="pic";
   System.out.println(msg);
   return msg;
  }
  
 }
 
 //判断文件上传的大小是否符合要求最大为3M
 private String judegImageSize(File image){
  String msg = null;
  if(image.length()>maxSize){
   msg = "picBeyond";
  }
  return msg;
 }
 
 //判断文件是否为空
 private String judegImageNull(File image){
  String msg = null;
  if(image ==null){
   msg = "picNull";
  }
  return msg;
 }
 
 //或得UUID组装新的文件名
 private String getIDByUUID(){
  return UUID.randomUUID().toString().toUpperCase();
 }
 
 //按照年月创建文件夹
 private String createPath(){
  int year = Calendar.getInstance().get(Calendar.YEAR);
  int month = Calendar.getInstance().get(Calendar.MONTH)+1;
  return year +"\\" + month;
 }
 
 //删除数据表中的数据
 public boolean delTab(String id,String carOrDriver){
  String sql = "";
  if("car".equals(carOrDriver)){
   sql = "delete from cl_images where cl_id = '"+id+"'";
  }else if("driver".equals(carOrDriver)){
   sql = "delete from cl_jsyimage where jsyid = '"+id+"'";
  }
  return DBHelper.delete(sql);
 }
 //增加数据表中数据
 public boolean istTab(String id,String carOrDriver,String tmpPath){
  String sql = "";
  String picId = imgId;
  if("car".equals(carOrDriver)){
   sql = new StringBuffer("insert into carimages(image_id,cid,cimage) values ('")
   .append(picId)
   .append("','")
   .append(id)
   .append("','")
   .append(tmpPath)
   .append("')").toString();
  }else if("driver".equals(carOrDriver)){
   sql = new StringBuffer("insert into deiverimage(image_id,did,dimage) values ('")
   .append(picId)
   .append("','")
   .append(id)
   .append("','")
   .append(tmpPath)
   .append("')").toString();
  }
  return DBHelper.insert(sql);
 }
 //删除硬盘上的数据
 public void delFile(String path){
  File f = new File(path);
  if(f.exists()){
   if(!f.isDirectory()){
    f.delete();
   }
  }
 }
 //如果数据库存在数据则获取图片名称
 public String delFilePath(String id,String carOrDeiver){

  String sql = "";
  List <Map<String,Object>> list = null; 
  String fileName = "";
  
  if("car".equals(carOrDeiver)){
   sql = new StringBuffer("select * from carimages t where t.cid = '")
    .append(id)
    .append("'").toString();
   
  }else if("deiver".equals(carOrDeiver)){
   sql = new StringBuffer("select * from deiverimage t where t.did = '")
   .append(id)
   .append("'").toString();
  }
  
  list = DBHelper.query(sql);
  
  if(list.size()==1){
   //表中有记录
   Map<String,Object> map = list.get(0);
   if("0".equals(carOrDeiver)){
    fileName = map.get("PICTURE").toString();
   }else if("1".equals(carOrDeiver)){
    fileName = map.get("JSY_IMAGE").toString();
   }
  }
  
  String path = "";
  if("car".equals(carOrDeiver)){
   path = ServletActionContext.getServletContext().getRealPath("/upload/car");
  }else if("deiver".equals(carOrDeiver)){
   path = ServletActionContext.getServletContext().getRealPath("/upload/pers");
  }
  
  path += fileName;
  System.out.println(path);
  return path;
 }
  

}

 

struts.xml 代码

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
     <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
    <constant name="struts.serve.static.browserCache" value="false" />
    <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
    <constant name="struts.configuration.xml.reload" value="true" />
    <!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
    <constant name="struts.devMode" value="true" />
    <!-- 默认的视图主题 -->
    <constant name="struts.ui.theme" value="simple" />
    <!--<constant name="struts.objectFactory" value="spring" />-->
    <!--解决乱码    -->
    <constant name="struts.i18n.encoding" value="UTF-8" />
    <!-- 指定允许上传的文件最大字节数。默认值是2097152(2M) -->
    <constant name="struts.multipart.maxSize" value="10701096"/>
   
    <!--  -->     
    <package name="upload"  extends="struts-default">
        <action name="load" class="com.upload.UploadAction">
            <result name="picSuccess">/imgResult/success.html</result>
            <result name="picNull">/imgResult/picNull.html</result>
            <result name="picModel">/imgResult/picModel.html</result>
            <result name="picBeyond">/imgResult/picBeyond.html</result>
        </action>
    </package>
  
    <package name ="show"  extends="json-default">
        <action name="show" class="com.upload.ShowImgAction" >
         <result name="showImg" type="json"></result>
        </action>
    </package>
   
   
</struts>

html页面 代码

<!DOCTYPE html>
<html>
  <head>
    <title>图片上传</title>
    <script type="text/javascript" src="jquery-1.8.2.min.js"></script>
 <script type="text/javascript" src="jquery.form.js"></script>
 <script type="text/javascript">
  
  $(function(){
   ajaxImg();
  });
  function ajaxImg(){
   $("#btn_carInfo_uploadFile").click(function(){
   var options = {
    url: "load.action",
    type: "post",
    success: function(data){
     if (data.trim() == "picSuccess") {
      alert("上传成功!!");
      $.post("show!showImg.action?id=0000",function(data){
       var url = "..\\images\\car\\"+data.picUrl;
       $("#pic").attr("src",url);
      });
     }else if (data.trim() == "picNull") {
      alert("请选择文件!");
     }else if (data.trim() == "picModel") {
      alert("请上传指定的图片格式!");
     }else if (data.trim() == "picBeyond") {
      alert("上传文件太大了!");
     }else {
      alert("上传失败!!");
     }
     }
     };
     $("#pic_upload").ajaxForm(options);
   });
  
  }
  
 </script>
  </head>
 
  <body>
   <h2>图片上传</h2><br>
    <form id="pic_upload" action="#"
              enctype="multipart/form-data" method="post">
             文件:<input type="file" name="image">
         <input type="submit" id="btn_carInfo_uploadFile" value="上传" />
         <input type="text" id ="carOrDeiver" name="carOrDeiver" value="car" />
         <input type ="text" id="clid" value="0000" name="car_pers_id" hidden="true"/>
    </form>
    <br/>
    <div>
     <img id="pic" style="height: 110px; width: 156px; cursor: pointer" src=""/>
    </div>
  </body>
</html>

 

 

原创粉丝点击