分类:原创 share 发布 2009.12.22 22:12:13Tag : java,Blob,DB2,Tomcat,ext,DWR,iBATIS commentComment:0
13
dig bury

公司需要做一个吧图片直接存储进数据库的功能,尝试了几天终于做了出来

环境:

Tomcat5.5或6.0

jdk1.6.0_14

应该是iBATIS 2.X

DB2 8.1

ext3.0

DWR

流程:先使用一个servlet上传至项目的服务器,然后再读取项目的的路径,获取上传的文件,读取文件流转化成能存储的Byte类型,通过 iBATIS写入DB2数据库

servlet web.xml配置:


	  
imageupload
com.copote.businessManage.upload.fileupload

imageupload
/imageupload

ext页面代码:

Html页面:

关键是<div id="addPanel"></div>其他就是一些基本引用





角色管理
		
		
   		
   		
   		
		
		
	    
	    
    	
	    
	   
	    
	    
		 
		 
		 
		 


Js页面:

关键代码:url: '../../imageupload?stylePath=image&post=add&id='+getRequestParame("id"),

其他是一些布局

function upload(fb){
	if(addPanel.getForm().isValid()){
		alert(addPanel.items.items[0].getValue());
		addPanel.getForm().submit({                	
                    success: function(fp, action){ 
                        //Ext.Msg.alert('信息', action.result.message); 
                        //alert(parent.dbsx_panel);
                        alert(uploadwindow.id);
                        
                    }, 
                    failure: function(fp, action){ 
                        Ext.Msg.alert('错误', action.result.message);                        
                    } 
                }); 
	               
                }
	
}


function createAddPanel()
{	
		Ext.QuickTips.init(); 
	    Ext.form.Field.prototype.msgTarget = 'side';

                       
	    
         
	var fp = new Ext.FormPanel({
	        fileUpload: true,
	        width: 500,
	        frame: true,
	        title: '上传签名',
	        autoHeight: true,
	        bodyStyle: 'padding: 10px 10px 0 10px;',
	        labelWidth: 50,
	        url: '../../imageupload?stylePath=image&post=add&id='+getRequestParame("id"),
	        defaults: {
	            anchor: '95%',
	            allowBlank: false,
	            msgTarget: 'side'
	        },
	        items: [{
	            	xtype: 'textfield', 
		            fieldLabel: '文件名', 
		            name: 'file', 
		            inputType: 'file',  //ļ 
		            anchor:'95%'
	        }],
	        	buttons: [{
	            text: '确定',
	            handler: function(){
	            	if(fp.getForm().isValid()){
		//alert(fp.items.items[0].getValue());
		fp.getForm().submit({                	
                    success: function(fp, action){ 
                       
                        parent.alertMsg(action.result.message,'信息'); 
                        parent.reloadData();
                        parent.window_add.close();
                        //alert(uploadwindow.id);
                        
                    }, 
                    failure: function(fp, action){ 
                        Ext.Msg.alert('错误', action.result.message);                        
                    } 
                }); 
	               
                }
	            }
	        },{
	            text: '重置',
	            handler: function(){
	                fp.getForm().reset();
	            }
	        }]
	    });

    fp.render("addPanel");

	 

} 

Ext.onReady(function(){ 
Ext.QuickTips.init(); 
	Ext.BLANK_IMAGE_URL = '../../images/s.gif'; 
	createAddPanel(); 
});

Java:

ImageBean:

关键代码:private byte[] signimg;

package com.copote.businessManage.uploadImage.bean;

import java.sql.Blob;

import oracle.sql.BLOB;

public class ImageBean {

	private String signcode;
	
	private String signnote;
	
	private byte[] signimg;
	
	private String image;

	private String orgname;

	public String getOrgname() {
		return orgname;
	}

	public void setOrgname(String orgname) {
		this.orgname = orgname;
	}

	private String userid	;//登录账号
	private String emname	;//员工姓名
	private String emnumber	;//员工工号
	private String emcode	;//员工编码
	private String orgcode	;//机构编码
	private String o_orgcode;//机构名称
	private String decode	;//部门编码
	private String emsta	;//员工岗位
	private String emstatus	;//员工状态

	private String mobilenmber	;//手机号码
	private String officetel	;//办公电话
	private String email	;//电子邮箱
	private String signature	;//签章名称
	public String getEmname() {
		return emname;
	}

	public void setEmname(String emname) {
		this.emname = emname;
	}

	public String getEmnumber() {
		return emnumber;
	}

	public void setEmnumber(String emnumber) {
		this.emnumber = emnumber;
	}

	public String getEmcode() {
		return emcode;
	}

	public void setEmcode(String emcode) {
		this.emcode = emcode;
	}

	public String getOrgcode() {
		return orgcode;
	}

	public void setOrgcode(String orgcode) {
		this.orgcode = orgcode;
	}

	public String getO_orgcode() {
		return o_orgcode;
	}

	public void setO_orgcode(String oOrgcode) {
		o_orgcode = oOrgcode;
	}

	public String getDecode() {
		return decode;
	}

	public void setDecode(String decode) {
		this.decode = decode;
	}

	public String getEmsta() {
		return emsta;
	}

	public void setEmsta(String emsta) {
		this.emsta = emsta;
	}

	public String getEmstatus() {
		return emstatus;
	}

	public void setEmstatus(String emstatus) {
		this.emstatus = emstatus;
	}

	public String getMobilenmber() {
		return mobilenmber;
	}

	public void setMobilenmber(String mobilenmber) {
		this.mobilenmber = mobilenmber;
	}

	public String getOfficetel() {
		return officetel;
	}

	public void setOfficetel(String officetel) {
		this.officetel = officetel;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getSignature() {
		return signature;
	}

	public void setSignature(String signature) {
		this.signature = signature;
	}



	public String getImage() {
		return image;
	}

	public void setImage(String image) {
		this.image = image;
	}

	public String getSigncode() {
		return signcode;
	}

	public void setSigncode(String signcode) {
		this.signcode = signcode;
	}

	public String getUserid() {
		return userid;
	}

	public void setUserid(String userid) {
		this.userid = userid;
	}

	public String getSignnote() {
		return signnote;
	}

	public void setSignnote(String signnote) {
		this.signnote = signnote;
	}

	public byte[] getSignimg() {
		return signimg;
	}

	public void setSignimg(byte[] signimg) {
		this.signimg = signimg;
	}
}

fileupload:

关键代码:

bean.setSignimg(new ImageManage().FileToByte(uploadPath + fileName));
new ImageManage().insert(bean);
//文件转成字节blob型



package com.copote.businessManage.upload;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.*;

import com.copote.Frame.Sql;
import com.copote.businessManage.employee.bean.EmployeeInfo;
import com.copote.businessManage.employee.dao.EmployeeManage;
import com.copote.businessManage.uploadImage.bean.ImageBean;
import com.copote.businessManage.uploadImage.dao.ImageManage;
import com.lowagie2.text.Image;

public class fileupload extends HttpServlet {
	/**  
	     *   
	     */
	private static final long serialVersionUID = 7440302204266787092L;
	String path = this.getClass().getClassLoader().getResource("/").getPath();
	String tempPath = path.substring(0, path.length() - 17) + "/upload/tmp/"; // 用于存放临时文件的目录

	public fileupload() {
		super();
		System.out.println("文件上传启动");
	}

	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	public void init() throws ServletException {
		System.out.println("文件上传初始化...");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {
		try {

			String uploadPath = path.substring(0, path.length() - 17)
					+ "/upload/"; // 用于存放上传文件的根目录
			File FileFoldersUpload = new File(uploadPath);
			//判断是否有upload文件夹
			if (!FileFoldersUpload.exists())
				FileFoldersUpload.mkdir();
			
			String stylePath = request.getParameter("stylePath");
			
			
			File FileFoldersImage = new File(uploadPath+stylePath);
			//判断是否有upload/image文件夹
			if (!FileFoldersImage.exists())
				FileFoldersImage.mkdir();
			
			File FileFoldersTmp = new File(uploadPath+"tmp");
			//判断是否有upload/tmp文件夹
			if (!FileFoldersTmp.exists())
				FileFoldersTmp.mkdir();
			
			if (stylePath == null)
				stylePath = "";
			String picName = request.getParameter("id");

			if (stylePath != null || stylePath != "null" || stylePath != "") {
				uploadPath = uploadPath + stylePath + "/";
			}

			System.out.println("---------------uploadPath:" + uploadPath);
			System.out.println("开始进行文件上传");
			DiskFileUpload fu = new DiskFileUpload();
			fu.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB
			fu.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb
			fu.setRepositoryPath(tempPath); // 设置临时目录
			List fileItems = fu.parseRequest(request); // 得到所有的文件:
			Iterator i = fileItems.iterator();
			// 依次处理每一个文件:
			String filename = null;
			while (i.hasNext()) {
				FileItem fi = (FileItem) i.next();
				String fileName = fi.getName();// 获得文件名,这个文件名包括路径:
				//上传中文文件名
				fileName = new String(fileName.getBytes("gbk"), "Utf-8");
				if (fileName != null) {
					// 在这里可以记录用户和文件信息
					// 此处应该定义一个接口(CallBack),用于处理后事。
					// 写入文件a.txt,你也可以从fileName中提取文件名:
					String extfile = "sss"
							+ fileName.substring(fileName.indexOf(".")); // .jpg

					extfile = extfile.substring(extfile.length() - 5);
					extfile = extfile.substring(extfile.indexOf(".")); // .jpg
					System.out.println("文件后缀名:" + extfile);
					if (checkFileType(extfile)) {

						File files = new File(uploadPath + fileName);

						String row = new ImageManage().RowByUserid(request
								.getParameter("id"));

						System.out.println("行数" + row);
						System.out.println(request.getParameter("post"));
						//判断是否只有一个签名和是否是编辑
						if (row.equals("0") || request.getParameter("post").equals("edit")) {

							if(request.getParameter("post").equals("edit")){
								String[] userid = new String[]{request
										.getParameter("id")};
								//删除原来的签名
								new ImageManage().deleteImage(userid);
								fi.write(files);
								filename = fileName;
								response.setContentType("text/html;charset=gbk");
								response.getWriter().print(
										"{'success':true,'message':'修改成功','filename':'"
												+ filename + "'}");
							}else{
								fi.write(files);
								filename = fileName;
								response.setContentType("text/html;charset=gbk");
								response.getWriter().print(
										"{'success':true,'message':'上传成功','filename':'"
												+ filename + "'}");
							}
							
							System.out.println("图片上传成功");
							System.out.println(uploadPath);
							System.out.println(fileName);

							ImageBean bean = new ImageBean();
							bean.setSignnote("");
							bean.setUserid(request.getParameter("id"));
							//文件转成字节blob型
							bean.setSignimg(new ImageManage()
									.FileToByte(uploadPath + fileName));
							new ImageManage().insert(bean);

							FileInputStream str = new FileInputStream(files);
							EmployeeInfo employeeInfo = new EmployeeInfo();

						} else {
							response.setContentType("text/html;charset=gbk");
							response.getWriter().print(
											"{'success':false,'message':'上传失败,只能上传一个签名'}");
						}

					} else {
						response.setContentType("text/html;charset=gbk");
						response.getWriter().print(
								"{'success':false,'message':'上传失败,请检查文件类型'}");
					}
				}
			}

			// 跳转到上传成功提示页面

		} catch (Exception e) {
			e.printStackTrace();
			response.setContentType("text/html;charset=utf-8");
			response.getWriter().print("{'success':false,'message':'上传失败'}");
			// 可以跳转出错页面
		}

	}

	// .bmp,.jpeg,.gif,.png,.jpg
	public boolean checkFileType(String fileType) {
		if (fileType.equalsIgnoreCase(".jpg"))
			return true;
		if (fileType.equalsIgnoreCase(".bmp"))
			return true;
		if (fileType.equalsIgnoreCase(".jpeg"))
			return true;
		if (fileType.equalsIgnoreCase(".gif"))
			return true;
		if (fileType.equalsIgnoreCase(".png"))
			return true;
		if (fileType.equalsIgnoreCase(".dll"))
			return true;
		if (fileType.equalsIgnoreCase(".exe"))
			return true;
		if (fileType.equalsIgnoreCase(".txt"))
			return true;
		return false;
	}

}

插入数据代码:

/**
	 * 添加员工签名
	 * @param bean
	 * @return
	 * @throws IOException
	 */
	public Map insert(ImageBean bean) throws IOException {

		Map map = new HashMap();
		boolean value = true;
		try {
			Sql.getSqlMapClient().insert("insert.image.bean", bean);
			map.put("msg", "增加成功");
			value = true;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			map.put("msg", "增加失败");
			value = false;
		}
		map.put("success", value);
		return map;
	}

核心类:

/**
	 * 文件转成字节数组
	 * 
	 * @param url
	 * 文件路径
	 * @return
	 * @throws IOException
	 */
	public static byte[] FileToByte(String url) throws IOException {
		BufferedInputStream in = new BufferedInputStream(new FileInputStream(
				url));
		ByteArrayOutputStream out = new ByteArrayOutputStream(1024);

		byte[] temp = new byte[1024];
		int size = 0;
		while ((size = in.read(temp)) != -1) {
			out.write(temp, 0, size);
		}
		in.close();

		byte[] content = out.toByteArray();
		return content;
	}

Ibatis:





	
	

	
		insert into tbpe_employeesign
			(signcode, userid, signnote, signimg)
		values
			(nextval for q_signcode, #userid#, #signnote# ,#signimg#)
	


我也来说2句,请不要发表违反法律的言论

姓名

Email(必填)

主页(不要加http://)