首页 > 代码库 > Java SSH 项目总结——Struts2上传图片组

Java SSH 项目总结——Struts2上传图片组

前言

 

在一个表单中上传5张图片分别隶属于5类别,在Strust2表单中赋予file控件的name属性一样,实现多张图片与该图片隶属的类别信息进行提交,后台获取上传文件的数组信息,然后将图片和类别信息进行保存,完成图片上传的功能。

 

正文

 

前台页面



 

前台代码

 

</pre><pre name="code" class="html"><s:form  id="fileForm" name="fileForm" enctype="multipart/form-data" method="post" >
								<table class="table table-bordered table-striped"
									style="border: #cdcdcd 1px solid; text-align: center;"
									align="center">
									<tr>
										<td>
											<font color="red">*</font>一类:
											<div>
												<input id="materialTypeName" name="materialTypeName1"
													type="radio" value=http://www.mamicode.com/"企业法人营业执照" checked/>>

 

 

 

前端的核心代码是下面的这个file标签数组,name属性一样,这样就可以将图片批量提交到actionaction类中接收图片数组。

<s:fileid="file1" label="File(1)" name="uploads" />

<s:fileid="file2" label="File(2)" name="uploads" />

<s:fileid="file3"label="File(3)"name="uploads" />

<s:fileid="file4"label="File(4)"name="uploads" />

<s:fileid="file5"label="File(5)"name="uploads" />

 

 

Js代码

 

js中我们对上传图片的格式进行了验证,同时得到每张图片所属类别的信息,然后将图片和类别信息进行Form表单提交

 

//验证图片格式
function validateFileFormat(){
	//获取欲上传的文件路径
	var filepath1 = document.getElementById('file1').value; 
	var d1=/\.[^\.]+$/.exec(filepath1);
	var filepath2 = document.getElementById('file2').value; 
	var d2=/\.[^\.]+$/.exec(filepath2);
	var filepath3 = document.getElementById('file3').value; 
	var d3=/\.[^\.]+$/.exec(filepath3);
	var filepath4 = document.getElementById('file4').value; 
	var d4=/\.[^\.]+$/.exec(filepath4);
	var filepath5 = document.getElementById('file5').value; 
	var d5=/\.[^\.]+$/.exec(filepath5);

	

 
	//为了避免转义反斜杠出问题,这里将对其进行转换
        var tp =".jpg,.image,.gif,.jpeg,.png,.bmp,.JPG,.GIF,.BMP,.IMAGE,.JPEG,.PNG";
        //返回符合条件的后缀名在字符串中的位置
        var rs1=tp.indexOf(d1);
        var rs2=tp.indexOf(d2);
        var rs3=tp.indexOf(d3);
        var rs4=tp.indexOf(d4);
        var rs5=tp.indexOf(d5);
        //如果返回的结果大于或等于0,说明包含允许上传的文件类型
        if(rs1>=0){
            if(rs2>=0){
                if(rs3>=0){
                if(filepath4==""){
                	 if(filepath5==""){			                	 
		                	return true;
				      }else{
					      
				        	 if(rs5>=0){
					        	 return true;
					       	 }else{
			          	          alert("您选择五类型的扫描件不是有效的图片格式!");
			          	          return false;
				          	 }
						}
		        }else{
		        	 if(rs4>=0){
		        		 if(filepath5==""){
			                	return true;
					        }else{
					        	 if(rs5>=0){
						        	 return true;
						       	 }else{
				          	          alert("您选择五类型的扫描件不是有效的图片格式!");
				          	          return false;
					          	 }
							}
			       	 }else{
	          	          alert("您选择四类型的扫描件不是有效的图片格式!");
	          	          return false;
		          	 }
				}
                
        	    	
          	   	 }else{
          	        alert("您选择三类型的扫描件不是有效的图片格式!");
          	        return false;
          	     }
    	    	
      	     }else{
      	          alert("您选择二类型的扫描件不是有效的图片格式!");
      	          return false;
      	     }
    	
         }else{
          alert("您选择一类型的扫描件不是有效的图片格式!");
          return false;
        }
	
}		


//上传文件验证
function fileValidate(){

  var fileName1=document.getElementById('file1').value;
  var fileName2=document.getElementById('file2').value;
  var fileName3=document.getElementById('file3').value;
  var fileName4=document.getElementById('file4').value;
  var fileName5=document.getElementById('file5').value;
	
	if(!fileName1)
	
	{
		alert("请选择上传文件:一类");
		return false; 
	}else{
		document.getElementById('materialType1').value=http://www.mamicode.com/"1";>
 

 

 

 

action中的方法

 

action类中,我们利用getset方法将文件上传的属性注入到此action类中,包括uploadsuploadsContentTypeuploadsFileName,要注意的是uploads是前台标签的的name,一定要保持一致。得到上传的文件的信息后,我们将文件上传的服务器指定的文件夹下,然后将文件的信息保存到数据库中。

 

package cn.bjjczb.jyzgcx.view.action;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionContext;

import cn.bjjczb.jyzgcx.base.BaseAction;
import cn.bjjczb.jyzgcx.domain.CompanyInfo;
import cn.bjjczb.jyzgcx.domain.CompanyMaterial;
import cn.bjjczb.jyzgcx.domain.DictionaryTitle;
import cn.bjjczb.jyzgcx.domain.ReplyResult;


@Controller
@Scope("prototype")
public class CompanyMaterialAction extends BaseAction<CompanyMaterial> {
	
    private List<File> uploads;  // 上传多个文件的集合文本  
    private List<String> uploadsContentType;  // /多个上传文件的类型集合  
    private List<String> uploadsFileName; // 多个上传文件的文件名集合  
	
    private List<String> materialTypeName1;
	private List<String> materialType1;
  
    
    


	/** 添加*/
	public String add() throws Exception {
		
			//从session中得到上传材料的用户的信息
			CompanyInfo returncompanyInfo = this.getCompanyInfo();	  
			String comId=returncompanyInfo.getOrganizationCode();
			String socId=returncompanyInfo.getSocialNumber();
			CompanyInfo companyInfo=new CompanyInfo();
			//得到第一类型的材料类别和名称
			List<String> materialTypeList=this.getMaterialType1();
			List<String> materialTypeNameList=this.getMaterialTypeName1();
			
			//打印前台表单提交过来的文件数组的属性
			System.out.println(uploadsFileName);
			System.out.println(materialTypeList);
			System.out.println(materialTypeNameList);
			
			
			// 把上传的文件放到指定的路径下  
		       String path = ServletActionContext.getServletContext().getRealPath("/uploadImages");   
		    // 写到指定的路径中  
		       File file = new File(path);   
		    // 如果指定的路径没有就创建  
		       if (!file.exists()) {  
		           file.mkdirs();  
		       }  
		    // 把得到的文件的集合通过循环的方式读取并放在指定的路径下  
		       System.out.println(uploads.size());
		       for (int i = 0; i < uploads.size(); i++) {  
		           try {  
		       		   Date date=new Date();	
		              //list集合通过get(i)的方式来获取索引  
		        	   System.out.println(uploadsFileName.get(i));
		        	
		        	   SimpleDateFormat stingDateFormat  = new SimpleDateFormat("yyyyMMddHHmmss");
		        	   String wordfileadd = stingDateFormat.format(date)+socId+uploadsFileName.get(i);

		              FileUtils.copyFile(uploads.get(i), new File(file, wordfileadd));
		           } catch (IOException e) {  
		              e.printStackTrace();  
		           }  
		       }  
		       
		   	//保存材料到数据库
		       String fileFolder = "\\"+"jyzgcx"+"\\"+"uploadImages"+"\\";	
		       int n=uploadsFileName.size(); 
				//调用方法保存材料到数据库
			   this.DoSaveAll(companyInfo, materialTypeList, materialTypeNameList, uploadsFileName, fileFolder, n);
				System.out.println("~~~~~~~~~~~~~~上传成功!");

			return "repeatLogin";

			
	} 


	
	//保存图片到数据库
	public void DoSaveAll(CompanyInfo companyInfo,List<String> materialTypeList,List<String> materialTypeNameList,List<String> uploadsFileName,String fileFolder,int s){
		Date date=new Date();			
	    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	    String createTime = formatter.format(date);
		CompanyMaterial companyMaterial = null;
		CompanyInfo returncompanyInfo = this.getCompanyInfo();
		String comId=returncompanyInfo.getOrganizationCode();
		String socId=returncompanyInfo.getSocialNumber();


	   SimpleDateFormat stingDateFormat  = new SimpleDateFormat("yyyyMMddHHmmss");
	   String wordfileadd = stingDateFormat.format(date)+socId;

		for (int i = 0; i < s; i++) {
			companyMaterial=new CompanyMaterial();
			companyMaterial.setCompanyInfo(companyInfo);
			companyMaterial.setState("1");
			companyMaterial.setCreateDate(createTime);
			companyMaterial.setMaterialType(materialTypeList.get(i));
			companyMaterial.setMaterialTypeName(materialTypeNameList.get(i));
			companyMaterial.setFileName(wordfileadd+uploadsFileName.get(i));
			companyMaterial.setFileUrl(fileFolder+wordfileadd+uploadsFileName.get(i));
			companyMaterialService.save(companyMaterial);
		}
		
	}
	

    public List<String> getMaterialTypeName1() {
		return materialTypeName1;
	}

	public void setMaterialTypeName1(List<String> materialTypeName1) {
		this.materialTypeName1 = materialTypeName1;
	}


	public List<String> getMaterialType1() {
		return materialType1;
	}

	public void setMaterialType1(List<String> materialType1) {
		this.materialType1 = materialType1;
	}
	public List<File> getUploads() {
		return uploads;
	}

	public void setUploads(List<File> uploads) {
		this.uploads = uploads;
	}

	public List<String> getUploadsContentType() {
		return uploadsContentType;
	}

	public void setUploadsContentType(List<String> uploadsContentType) {
		this.uploadsContentType = uploadsContentType;
	}

	public List<String> getUploadsFileName() {
		return uploadsFileName;
	}

	public void setUploadsFileName(List<String> uploadsFileName) {
		this.uploadsFileName = uploadsFileName;
	}


}


 

小结

 

我们在Strust2的表单中赋予file控件的name属性一样,实现多张图片进行提交,后台获取file数组,完成图片上传的功能。由此拓展出来,只要前台控件的name属性一样,我们就可以在后台获取前台的name属性一样的控件数组的值,知道这一点用起来确实会方便很多。



Java SSH 项目总结——Struts2上传图片组