文件上传(图片)

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.Action;
import org.apache.struts.upload.FormFile;

import noss4.common.dao.UCompanyDaoImpl;
import noss4.common.dao.UNetrelationImpl;
import noss4.wlpz.gcsj.dao.UProjectDataImpl;
import noss4.wlpz.gcsj.form.uploadForm;
public class UploadAction extends Action {
	
         //说明:由于项目中用的spring  前面的三个类是通过spring 注入过的 
//不用理会 
	UProjectDataImpl uprojectdataimpl;
	
	UCompanyDaoImpl companyimpl;
	
	UNetrelationImpl unetrelationimpl;

	/**上传方法
          * 参数file FormFile文件
            * 参数 dir 上传路径  参数 newName  上传后新文件名
          */ 
	public String doFormFile(FormFile file, String dir,String newName) {
		try {
                         //根据路径形成文件
			File f = new File(dir);
                        //判断文件是否存在 如果不存在则创建个新的
			if (!f.exists()) {
				f.mkdir();
			}
                        //输入流
			InputStream in = file.getInputStream();
                        //写入流
			FileOutputStream writer = new FileOutputStream(dir + "/"
					+ newName);
			int bytesRead = 0;
			byte[] buffer = new byte[8192];
			while ((bytesRead = in.read(buffer, 0, 8192)) != -1) {
				writer.write(buffer, 0, bytesRead);
			}
			writer.flush();
			writer.close();
			in.close();
			file.destroy();

		} catch (Exception e) {
			e.printStackTrace();
		}
		return file.getFileName();
	}
	
	
	//上传Action 说明:业务逻辑我给去掉了 
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
                  //得到上传表单
		uploadForm uploadImageForm = (uploadForm) form;
             //得到表单的内容 可忽略不看
		String nid=uploadImageForm.getNid();
		String subcompid=uploadImageForm.getI_subcomp_id();
			FormFile file = null;
		String newname="";
               //判断form表单 是否为空或是否有内容
		if(uploadImageForm.getFile()!=null && !uploadImageForm.getFile().toString().equals("")) {
                    //如果有的话 则 得到文件 
			file = uploadImageForm.getFile();
                          //判断文件大小 可自定义
			if(file.getFileSize()>(200*1024)) {
				request.setAttribute("uploadInfo", "图片太大,图片不要超过200k!");
				return mapping.findForward("manageimage");
			}
                        //判断文件是否是图片 也可以判断其他格式 
			if(file.getContentType().equals("image/pjpeg")||file.getContentType().toLowerCase().equals("image/gif")) {
				if(file.getContentType().equals("image/pjpeg"))
//下面是相关业务逻辑 可忽略 但newname 可自己跟自己需要定义
				{
					newname=subcompid+nid.replace("/", "")+".jpg";
				}
				if(file.getContentType().toLowerCase().equals("image/gif"))
				{
					newname=subcompid+nid.replace("/", "")+".gif";
				}
                           //得到当前工程真实路径
				String dir=request.getSession().getServletContext().getRealPath("/upload/");
                                   //调用顶部文件上传方法
				this.doFormFile(file,dir,newname);
				String inserturl="upload/"+newname;
				int sucess=uprojectdataimpl.inserurl(cells, inserturl);
				if(sucess>0)
				{
					request.setAttribute("uploadInfo", "上传图片成功!");
				}else
				{
					request.setAttribute("uploadInfo", "上传图片失败!");
				}
				return mapping.findForward("manageimage");
				
			}
			else {
				request.setAttribute("uploadInfo", "图片格式不对,应该为 .gif||.jpg||.jpeg");
				return mapping.findForward("manageimage");
			}
		}else {
			request.setAttribute("uploadInfo", "请上传图片!");
			return mapping.findForward("manageimage");
		}
	}
	
	public void setUprojectdataimpl(UProjectDataImpl uprojectdataimpl) {
		this.uprojectdataimpl = uprojectdataimpl;
	}


	public void setCompanyimpl(UCompanyDaoImpl companyimpl) {
		this.companyimpl = companyimpl;
	}


	public void setUnetrelationimpl(UNetrelationImpl unetrelationimpl) {
		this.unetrelationimpl = unetrelationimpl;
	}
}


这是formbean
package noss4.wlpz.gcsj.form;

import org.apache.struts.action.ActionForm;
import org.apache.struts.upload.FormFile;

public class uploadForm extends ActionForm {
	public uploadForm() {
	}

	private FormFile file;

	private String fname;
	
	private String size;
	
	private String i_subcomp_id;
	
	private String nid;


	public String getFname() {
		return fname;
	}

	public void setFname(String fname) {
		this.fname = fname;
	}

	public String getSize() {
		return size;
	}

	public void setSize(String size) {
		this.size = size;
	}

	public String getI_subcomp_id() {
		return i_subcomp_id;
	}

	public void setI_subcomp_id(String i_subcomp_id) {
		this.i_subcomp_id = i_subcomp_id;
	}

	public FormFile getFile() {
		return file;
	}

	public void setFile(FormFile file) {
		this.file = file;
	}

	public String getNid() {
		return nid;
	}

	public void setNid(String nid) {
		this.nid = nid;
	}

}


这是Struts XML 文件配置 formbean
   <form-beans>
		<form-bean name="uploadform" type="noss4.wlpz.gcsj.form.uploadForm" >
			<form-property name="file" type="org.apache.struts.upload.FormFile"></form-property>
			<form-property name="fname" type="java.lang.String"></form-property>
			<form-property name="size" type="java.lang.String"></form-property>
			<form-property name="i_subcomp_id" type="java.lang.String"></form-property>
			<form-property name="nid" type="java.lang.String"></form-property>
		</form-bean>
	</form-beans>


对了最后还有一个 跟上面的那个配置一起的 主要是把Actoin 与 formbean 绑定
name 就是要绑定formbean的名称
<action path="/gcsj/UploadAction" parameter="daili" type="noss4.wlpz.gcsj.action.UploadAction" name="uploadform">
			<forward name="addpictrue" path="/noss4/wlpz/projectdata/addpictrue.jsp"></forward>
			<forward name="manageimage" path="/noss4/wlpz/projectdata/manageimages.jsp"></forward>
		</action>

你可能感兴趣的:(java,DAO,apache,spring,struts)