公司需要做一个吧图片直接存储进数据库的功能,尝试了几天终于做了出来
环境:
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 Mapinsert(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#)



Comment:


