喜悦国际村 专业PHP开发者社区's Archiver

沉默的抗议 发表于 2009-12-23 10:52 AM

java DB2数据库Blob型字段读取 Ext页面

[i=s] 本帖最后由 沉默的抗议 于 2009-12-23 02:05 PM 编辑 [/i]

java DB2数据库Blob型字段读取 Ext页面
[url=http://hellophper.com/htm/4/380.html]http://hellophper.com/htm/4/380.html[/url]
公司需要做一个吧图片直接存储进数据库的功能,尝试了几天终于做了出来
环境:Tomcat5.5或6.0
      jdk1.6.0_14
      应该是iBATIS 2.X
      DB2 8.1
      ext3.0
      DWR

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


servlet web.xml配置:[code]<!-- image upload start bin-->
      <servlet>
    <servlet-name>imageupload</servlet-name>
    <servlet-class>com.copote.businessManage.upload.fileupload</servlet-class>
      </servlet>
      <servlet-mapping>
      <servlet-name>imageupload</servlet-name>
      <url-pattern>/imageupload</url-pattern>
      </servlet-mapping>
    <!-- image upload end -->[/code]ext页面代码:
Html页面:
关键是<div id="addPanel"></div>其他就是一些基本引用[code]<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>角色管理</title>
        <link rel="stylesheet" type="text/css" href="../../ext3.0/resources/css/ext-all.css" />
        <link rel="stylesheet" type="text/css" href="../../ext3.0/Ext_ux_css/Portal.css" />
           <link rel="stylesheet" type="text/css" href="../../ext3.0/Ext_ux_css/GroupTab.css" />
           <link rel="stylesheet" type="text/css" href="../../css/Main.css" />
           
        <script type="text/javascript" src="../../ext3.0/adapter/jquery/jquery-1.3.2.min.js"></script>
        <script type="text/javascript" src="../../ext3.0/adapter/ext/ext-base.js"></script>
        <script type="text/javascript" src="../../ext3.0/ext-all.js"></script>
        <script type="text/javascript" src="../../ext3.0/Ext_ux_Scripts/GroupTabPanel.js"></script>
        <script type="text/javascript" src="../../ext3.0/Ext_ux_Scripts/GroupTab.js"></script>
        <script type="text/javascript" src="../../ext3.0/ext-lang-zh_CN.js"></script>
      
        <script type="text/javascript" src='../../businessManage/upload/file-upload.js'></script>
        <script type='text/javascript'  src='../../dwr/engine.js'></script>
        <script type='text/javascript' src='../../js/dwrproxy.js'></script>
        <script type='text/javascript' src='../../dwr/interface/ImageManage.js'></script>
        <script type='text/javascript' src='add.js'></script>
         <script type="text/javascript" src='../../js/public.js'></script>
</head>
<body>
<div id="addPanel"></div>

</body>
</html>[/code]Js页面:
关键代码:url: '../../imageupload?stylePath=image&post=add&id='+getRequestParame("id"),
其他是一些布局[code]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();
});
[/code]Java:

ImageBean:
关键代码:private byte[] signimg;[code]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;
    }
}[/code]fileupload:
关键代码:[code]//文件转成字节blob型
bean.setSignimg(new ImageManage().FileToByte(uploadPath + fileName));
new ImageManage().insert(bean);

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;
    }

}[/code]插入数据代码:[code]/**
     * 添加员工签名
     * @param bean
     * @return
     * @throws IOException
     */
    public Map<String, Object> insert(ImageBean bean) throws IOException {

        Map<String, Object> map = new HashMap<String, Object>();
        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;
    }[/code]核心类:[code]/**
     * 文件转成字节数组
     *
     * @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;
    }[/code]Ibatis:[code]<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap  PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"  "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="image">
    <typeAlias alias="Image"
        type="com.copote.businessManage.uploadImage.bean.ImageBean" />
   

    <insert id="insert.image.bean" parameterClass="image">
        insert into tbpe_employeesign
            (signcode, userid, signnote, signimg)
        values
            (nextval for q_signcode, #userid#, #signnote# ,#signimg#)
    </insert>

</sqlMap>[/code]

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.