如题,我的表里有3个blob字段,需求用户同时上传这3张图片到数据库,但是上传之后,发现图片位置借位,第一张和最后一张图片会互换位置,我仔细查看代码没有发现问题,经过多次测试发现当上传>=2张图片的时候会发生这种问题,测试通过针对其中某一个字段单个保存可以正常保存,但是当>=2张时会出现上面问题。
下面是hibernate配置文件<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.jeecms.cms.entity.cep">
<class name="CepUserFleet" table="T_USER_FLEET">
<id name="id" type="java.lang.Integer" column="id">
<generator class="sequence"><param name="sequence">T_USER_FLEET_SEQ</param></generator>
</id>
<property name="userId" column="USER_ID" type="java.lang.Integer" not-null="true" />
<property name="loginName" column="LOGIN_NAME" type="string" not-null="true" />
<property name="userName" column="USER_NAME" type="string" not-null="true" />
<property name="cardNumber" column="CARD_NUMBER" type="string" />
<property name="cardNumberScann" column="CARD_NUMBER_SCANN" type="java.sql.Blob" />
<property name="carNum" column="CAR_NUM" type="java.math.BigDecimal" />
<property name="legalCardNum" column="LEGAL_CARD_NUM" type="string" />
<property name="legalName" column="LEGAL_NAME" type="string" />
<property name="legalCardCopy" column="LEGAL_CARD_COPY" type="java.sql.Blob" />
<property name="businessLicenseNum" column="BUSINESS_LICENSE_NUM" type="string" />
<property name="businessLicenseScann" column="BUSINESS_LICENSE_SCANN" type="java.sql.Blob" />
<property name="companyName" column="COMPANY_NAME" type="string" />
<property name="companyAddress" column="COMPANY_ADDRESS" type="string" />
<property name="companyZipCode" column="COMPANY_ZIPCODE" type="string" />
<property name="companyPhone" column="COMPANY_PHONE" type="string" />
<property name="companyFax" column="COMPANY_FAX" type="string" />
<property name="person" column="PERSON" type="string" />
<property name="phone" column="PHONE" type="string" />
<property name="email" column="EMAIL" type="string" />
<property name="mobile" column="MOBILE" type="string" />
<property name="createTime" column="CREATE_TIME" type="timestamp" length="19"/>
<property name="updateTime" column="UPDATE_TIME" type="timestamp" length="19"/>
</class>
</hibernate-mapping>
Entity类如下:package com.jeecms.cms.entity.cep.base;import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Blob;
import java.util.Date;public abstract class BaseCepUserFleet implements Serializable {
public BaseCepUserFleet() {
} public BaseCepUserFleet(Integer id) {
this.id = id;
}
private Integer id;
private Integer userId;
private String userName;
private String loginName;
private String cardNumber;
private Blob cardNumberScann;
private BigDecimal carNum;
private String legalCardNum;
private String legalName;
private Blob legalCardCopy;
private String businessLicenseNum;
private Blob businessLicenseScann;
private String companyName;
private String companyAddress;
private String companyZipCode;
private String companyPhone;
private String companyFax;
private String person;
private String phone;
private String mobile;
private String email;
private Date createTime;
private Date updateTime; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public Integer getUserId() {
return userId;
} public void setUserId(Integer userId) {
this.userId = userId;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public String getLoginName() {
return loginName;
} public void setLoginName(String loginName) {
this.loginName = loginName;
} public String getCardNumber() {
return cardNumber;
} public void setCardNumber(String cardNumber) {
this.cardNumber = cardNumber;
} public BigDecimal getCarNum() {
return carNum;
} public void setCarNum(BigDecimal carNum) {
this.carNum = carNum;
} public String getLegalCardNum() {
return legalCardNum;
} public void setLegalCardNum(String legalCardNum) {
this.legalCardNum = legalCardNum;
} public String getLegalName() {
return legalName;
} public void setLegalName(String legalName) {
this.legalName = legalName;
} public String getBusinessLicenseNum() {
return businessLicenseNum;
} public void setBusinessLicenseNum(String businessLicenseNum) {
this.businessLicenseNum = businessLicenseNum;
} public String getCompanyAddress() {
return companyAddress;
} public void setCompanyAddress(String companyAddress) {
this.companyAddress = companyAddress;
} public String getCompanyZipCode() {
return companyZipCode;
} public void setCompanyZipCode(String companyZipCode) {
this.companyZipCode = companyZipCode;
} public String getCompanyPhone() {
return companyPhone;
} public void setCompanyPhone(String companyPhone) {
this.companyPhone = companyPhone;
} public String getCompanyFax() {
return companyFax;
} public void setCompanyFax(String companyFax) {
this.companyFax = companyFax;
} public String getPerson() {
return person;
} public void setPerson(String person) {
this.person = person;
} public String getPhone() {
return phone;
} public void setPhone(String phone) {
this.phone = phone;
} public String getMobile() {
return mobile;
} public void setMobile(String mobile) {
this.mobile = mobile;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public Date getCreateTime() {
return createTime;
} public void setCreateTime(Date createTime) {
this.createTime = createTime;
} public Date getUpdateTime() {
return updateTime;
} public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
} public String getCompanyName() {
return companyName;
} public void setCompanyName(String companyName) {
this.companyName = companyName;
} public Blob getCardNumberScann() {
return cardNumberScann;
} public void setCardNumberScann(Blob cardNumberScann) {
this.cardNumberScann = cardNumberScann;
} public Blob getLegalCardCopy() {
return legalCardCopy;
} public void setLegalCardCopy(Blob legalCardCopy) {
this.legalCardCopy = legalCardCopy;
} public Blob getBusinessLicenseScann() {
return businessLicenseScann;
} public void setBusinessLicenseScann(Blob businessLicenseScann) {
this.businessLicenseScann = businessLicenseScann;
}}
package com.jeecms.cms.entity.cep;import java.math.BigDecimal;
import java.sql.Blob;
import java.util.Date;import com.jeecms.cms.entity.cep.base.BaseCepUserFleet;public class CepUserFleet extends BaseCepUserFleet {
private static final long serialVersionUID = 1L;
public CepUserFleet() {
super();
}
}
测试不上传文件直接从磁盘上读取特定文件代码保存到数据库,位置错乱。CepUserFleet fleet=cepUserFleetMng.findByUserIdOrUserName(vo.getUserFleet().getUserId(), null);
if(fleet!=null){
fleet.setCardNumber(vo.getUserFleet().getCardNumber());
fleet.setLegalName(vo.getUserFleet().getLegalName());
fleet.setLegalCardNum(vo.getUserFleet().getLegalCardNum());
fleet.setBusinessLicenseNum(vo.getUserFleet().getBusinessLicenseNum());
fleet.setCompanyName(vo.getUserFleet().getCompanyName());
fleet.setCompanyPhone(vo.getUserFleet().getCompanyPhone());
fleet.setCompanyZipCode(vo.getUserFleet().getCompanyZipCode());
fleet.setCompanyFax(vo.getUserFleet().getCompanyFax());
fleet.setCompanyAddress(vo.getUserFleet().getCompanyAddress());
fleet.setPerson(vo.getUserFleet().getPerson());
fleet.setMobile(vo.getUserFleet().getMobile());
fleet.setPhone(vo.getUserFleet().getPhone());
fleet.setEmail(vo.getUserFleet().getEmail());
fleet.setUpdateTime(vo.getUserFleet().getUpdateTime());
fleet.setCarNum(vo.getUserFleet().getCarNum());
/*
//upload
if(vo.getUserFleet().getCardNumberScann()!=null){
fleet.setCardNumberScann(vo.getUserFleet().getCardNumberScann());
}
if(vo.getUserFleet().getLegalCardCopy()!=null){
fleet.setLegalCardCopy(vo.getUserFleet().getLegalCardCopy());
}
if(vo.getUserFleet().getBusinessLicenseScann()!=null){
fleet.setBusinessLicenseScann(vo.getUserFleet().getBusinessLicenseScann());
}*/
//test
try {
fleet.setCardNumberScann(Hibernate.createBlob(new FileInputStream("F:/test3/08103204ugzb.jpg")));
fleet.setLegalCardCopy(Hibernate.createBlob(new FileInputStream("F:/test3/08103157nxg0.jpg")));
fleet.setBusinessLicenseScann(Hibernate.createBlob(new FileInputStream("F:/test3/08103202iido.jpg")));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}else{
fleet=vo.getUserFleet();
}
cepUserFleetMng.saveOrUpdate(fleet);
下面是数据库表结构
CARD_NUMBER_SCANN BLOB
LEGAL_CARD_COPY BLOB
BUSINESS_LICENSE_SCANN BLOB
下面是hibernate配置文件<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.jeecms.cms.entity.cep">
<class name="CepUserFleet" table="T_USER_FLEET">
<id name="id" type="java.lang.Integer" column="id">
<generator class="sequence"><param name="sequence">T_USER_FLEET_SEQ</param></generator>
</id>
<property name="userId" column="USER_ID" type="java.lang.Integer" not-null="true" />
<property name="loginName" column="LOGIN_NAME" type="string" not-null="true" />
<property name="userName" column="USER_NAME" type="string" not-null="true" />
<property name="cardNumber" column="CARD_NUMBER" type="string" />
<property name="cardNumberScann" column="CARD_NUMBER_SCANN" type="java.sql.Blob" />
<property name="carNum" column="CAR_NUM" type="java.math.BigDecimal" />
<property name="legalCardNum" column="LEGAL_CARD_NUM" type="string" />
<property name="legalName" column="LEGAL_NAME" type="string" />
<property name="legalCardCopy" column="LEGAL_CARD_COPY" type="java.sql.Blob" />
<property name="businessLicenseNum" column="BUSINESS_LICENSE_NUM" type="string" />
<property name="businessLicenseScann" column="BUSINESS_LICENSE_SCANN" type="java.sql.Blob" />
<property name="companyName" column="COMPANY_NAME" type="string" />
<property name="companyAddress" column="COMPANY_ADDRESS" type="string" />
<property name="companyZipCode" column="COMPANY_ZIPCODE" type="string" />
<property name="companyPhone" column="COMPANY_PHONE" type="string" />
<property name="companyFax" column="COMPANY_FAX" type="string" />
<property name="person" column="PERSON" type="string" />
<property name="phone" column="PHONE" type="string" />
<property name="email" column="EMAIL" type="string" />
<property name="mobile" column="MOBILE" type="string" />
<property name="createTime" column="CREATE_TIME" type="timestamp" length="19"/>
<property name="updateTime" column="UPDATE_TIME" type="timestamp" length="19"/>
</class>
</hibernate-mapping>
Entity类如下:package com.jeecms.cms.entity.cep.base;import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Blob;
import java.util.Date;public abstract class BaseCepUserFleet implements Serializable {
public BaseCepUserFleet() {
} public BaseCepUserFleet(Integer id) {
this.id = id;
}
private Integer id;
private Integer userId;
private String userName;
private String loginName;
private String cardNumber;
private Blob cardNumberScann;
private BigDecimal carNum;
private String legalCardNum;
private String legalName;
private Blob legalCardCopy;
private String businessLicenseNum;
private Blob businessLicenseScann;
private String companyName;
private String companyAddress;
private String companyZipCode;
private String companyPhone;
private String companyFax;
private String person;
private String phone;
private String mobile;
private String email;
private Date createTime;
private Date updateTime; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public Integer getUserId() {
return userId;
} public void setUserId(Integer userId) {
this.userId = userId;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public String getLoginName() {
return loginName;
} public void setLoginName(String loginName) {
this.loginName = loginName;
} public String getCardNumber() {
return cardNumber;
} public void setCardNumber(String cardNumber) {
this.cardNumber = cardNumber;
} public BigDecimal getCarNum() {
return carNum;
} public void setCarNum(BigDecimal carNum) {
this.carNum = carNum;
} public String getLegalCardNum() {
return legalCardNum;
} public void setLegalCardNum(String legalCardNum) {
this.legalCardNum = legalCardNum;
} public String getLegalName() {
return legalName;
} public void setLegalName(String legalName) {
this.legalName = legalName;
} public String getBusinessLicenseNum() {
return businessLicenseNum;
} public void setBusinessLicenseNum(String businessLicenseNum) {
this.businessLicenseNum = businessLicenseNum;
} public String getCompanyAddress() {
return companyAddress;
} public void setCompanyAddress(String companyAddress) {
this.companyAddress = companyAddress;
} public String getCompanyZipCode() {
return companyZipCode;
} public void setCompanyZipCode(String companyZipCode) {
this.companyZipCode = companyZipCode;
} public String getCompanyPhone() {
return companyPhone;
} public void setCompanyPhone(String companyPhone) {
this.companyPhone = companyPhone;
} public String getCompanyFax() {
return companyFax;
} public void setCompanyFax(String companyFax) {
this.companyFax = companyFax;
} public String getPerson() {
return person;
} public void setPerson(String person) {
this.person = person;
} public String getPhone() {
return phone;
} public void setPhone(String phone) {
this.phone = phone;
} public String getMobile() {
return mobile;
} public void setMobile(String mobile) {
this.mobile = mobile;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public Date getCreateTime() {
return createTime;
} public void setCreateTime(Date createTime) {
this.createTime = createTime;
} public Date getUpdateTime() {
return updateTime;
} public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
} public String getCompanyName() {
return companyName;
} public void setCompanyName(String companyName) {
this.companyName = companyName;
} public Blob getCardNumberScann() {
return cardNumberScann;
} public void setCardNumberScann(Blob cardNumberScann) {
this.cardNumberScann = cardNumberScann;
} public Blob getLegalCardCopy() {
return legalCardCopy;
} public void setLegalCardCopy(Blob legalCardCopy) {
this.legalCardCopy = legalCardCopy;
} public Blob getBusinessLicenseScann() {
return businessLicenseScann;
} public void setBusinessLicenseScann(Blob businessLicenseScann) {
this.businessLicenseScann = businessLicenseScann;
}}
package com.jeecms.cms.entity.cep;import java.math.BigDecimal;
import java.sql.Blob;
import java.util.Date;import com.jeecms.cms.entity.cep.base.BaseCepUserFleet;public class CepUserFleet extends BaseCepUserFleet {
private static final long serialVersionUID = 1L;
public CepUserFleet() {
super();
}
}
测试不上传文件直接从磁盘上读取特定文件代码保存到数据库,位置错乱。CepUserFleet fleet=cepUserFleetMng.findByUserIdOrUserName(vo.getUserFleet().getUserId(), null);
if(fleet!=null){
fleet.setCardNumber(vo.getUserFleet().getCardNumber());
fleet.setLegalName(vo.getUserFleet().getLegalName());
fleet.setLegalCardNum(vo.getUserFleet().getLegalCardNum());
fleet.setBusinessLicenseNum(vo.getUserFleet().getBusinessLicenseNum());
fleet.setCompanyName(vo.getUserFleet().getCompanyName());
fleet.setCompanyPhone(vo.getUserFleet().getCompanyPhone());
fleet.setCompanyZipCode(vo.getUserFleet().getCompanyZipCode());
fleet.setCompanyFax(vo.getUserFleet().getCompanyFax());
fleet.setCompanyAddress(vo.getUserFleet().getCompanyAddress());
fleet.setPerson(vo.getUserFleet().getPerson());
fleet.setMobile(vo.getUserFleet().getMobile());
fleet.setPhone(vo.getUserFleet().getPhone());
fleet.setEmail(vo.getUserFleet().getEmail());
fleet.setUpdateTime(vo.getUserFleet().getUpdateTime());
fleet.setCarNum(vo.getUserFleet().getCarNum());
/*
//upload
if(vo.getUserFleet().getCardNumberScann()!=null){
fleet.setCardNumberScann(vo.getUserFleet().getCardNumberScann());
}
if(vo.getUserFleet().getLegalCardCopy()!=null){
fleet.setLegalCardCopy(vo.getUserFleet().getLegalCardCopy());
}
if(vo.getUserFleet().getBusinessLicenseScann()!=null){
fleet.setBusinessLicenseScann(vo.getUserFleet().getBusinessLicenseScann());
}*/
//test
try {
fleet.setCardNumberScann(Hibernate.createBlob(new FileInputStream("F:/test3/08103204ugzb.jpg")));
fleet.setLegalCardCopy(Hibernate.createBlob(new FileInputStream("F:/test3/08103157nxg0.jpg")));
fleet.setBusinessLicenseScann(Hibernate.createBlob(new FileInputStream("F:/test3/08103202iido.jpg")));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}else{
fleet=vo.getUserFleet();
}
cepUserFleetMng.saveOrUpdate(fleet);
下面是数据库表结构
CARD_NUMBER_SCANN BLOB
LEGAL_CARD_COPY BLOB
BUSINESS_LICENSE_SCANN BLOB
解决方案 »
- marquee中的鼠标旋停
- 如何在jsp或jsf页面中嵌入excel表格????
- html中的select组件里值,如何从数据库中获取。
- 在jsp页面之间如何传递大批量的数据,非表单数据,急,请教各位大侠
- 菜鸟提问, Iterator是个什么样的东东?很快接分!
- jsp中request的使用
- 一JavaScript传递参数问题,请教
- 请教各位高手??
- 毕业设计选了网络教学系统,可是我在大学做了很多次了,想换一个主题,大家有什么建议?
- 请问分页遇到Cannot set property 'value' of undefined这个问题是什么原因?
- 把教材光盘中的JSP案例导入后.jsp文件都发生错误
- HtmlUnit求解救
/*
//upload
if(vo.getUserFleet().getCardNumberScann()!=null){
fleet.setCardNumberScann(vo.getUserFleet().getCardNumberScann());
}
if(vo.getUserFleet().getLegalCardCopy()!=null){
fleet.setLegalCardCopy(vo.getUserFleet().getLegalCardCopy());
}
if(vo.getUserFleet().getBusinessLicenseScann()!=null){
fleet.setBusinessLicenseScann(vo.getUserFleet().getBusinessLicenseScann());
}*/
//test
try {
fleet.setCardNumberScann(Hibernate.createBlob(new FileInputStream("F:/test3/08103204ugzb.jpg")));
fleet.setLegalCardCopy(Hibernate.createBlob(new FileInputStream("F:/test3/08103157nxg0.jpg")));
fleet.setBusinessLicenseScann(Hibernate.createBlob(new FileInputStream("F:/test3/08103202iido.jpg")));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}还有关于图片保存的问题我以前做项目都是存路径的,现在我的那个2b老大非要存数据库,问他怎么解决老是左顾而言他,BS这种鸟人,啥都不懂都老在说要这样要那样,B一样的.
fleet.setLegalCardCopy(Hibernate.createBlob(new FileInputStream("F:/test3/08103157nxg0.jpg")));
fleet.setBusinessLicenseScann(Hibernate.createBlob(new FileInputStream("F:/test3/08103202iido.jpg")));
我记得好象要先建立个空的吧 然后再转进去..
cepUserFleetMng.saveOrUpdate(fleet);
这个是services层的代码,下面是调的daopublic CepUserFleet saveOrUpdate(CepUserFleet bean) {
// TODO Auto-generated method stub
CepUserFleet resultFleet=null;
if(bean!=null){
if(bean.getId()!=null && bean.getId().intValue()>-1){
// resultFleet=updateByUpdater(bean);
resultFleet=cepUserFleetDao.update(bean);
}else{
resultFleet=save(bean);
}
}
return resultFleet;
}
fleet.setCardNumberScann(EMPTY_BLOB());
fleet.setCardNumberScann(Hibernate.createBlob(new FileInputStream("F:/test3/08103204ugzb.jpg")));试下
fleet.setCardNumberScann(Hibernate.createBlob(new FileInputStream("F:/test3/08103204ugzb.jpg")));
上面这段代码写在了一起,如果分开来写就是这样。
InputSteam ins=new FileInputStream("F:/test3/08103204ugzb.jpg");
Blob bb=Hibernate.createBlob(ins);
fleet.setCardNumberScann(bb);
这个按顺序执行,如果没有结束,我不明白图片为什么会保存成功。况且这个我是用来做测试用的。正常的代码读取上盘到服务器MultipartHttpServletRequest multipartRequest = null;
try {
multipartRequest = (MultipartHttpServletRequest) request;
} catch (Exception e) {
// TODO: handle exception
}
if(multipartRequest!=null){
//用户身份证号码扫描件
MultipartFile imgFile1= multipartRequest.getFile("userIdentityCardScan_"+suffix);
System.out.println("===用户身份证号码:start");
System.out.println("file1:"+imgFile1.getOriginalFilename());
List<String> fileTypes1=new ArrayList<String>();
// Object[] obj1=CepStringJudgeUtils.uploadFileByFieldName(fileTypes1, imgFile1);
Object[] obj1=uploadFileByFieldName(fileTypes1, imgFile1);
if(obj1!=null){
if(obj1[0]==null){
errors.addErrorCode("error.cep.register.required","用户身份证号码扫描件");
return;
}
if("uploadFileByFieldName.filetype.error".equals(obj1[2])){
String allowFileType=CepStringJudgeUtils.addJoinString(fileTypes1, ",");
errors.addErrorCode("error.cep.register.filetype","用户身份证号码扫描件",allowFileType);
return;
}
Blob contentFile=(Blob) obj1[0];
vo.setUserIdentityCardScan(contentFile);
System.out.println("####blob1:"+contentFile);
System.out.println("####blob3:"+vo.getUserIdentityCardScan());
}
System.out.println("===用户身份证号码:end");
}
public Object[] uploadFileByFieldName(List<String> fileTypes,MultipartFile uploadFile){
if(uploadFile!=null){
MultipartFile imgFile = uploadFile;
String fileName = imgFile.getOriginalFilename();
// 获取上传文件类型的扩展名,先得到.的位置,再截取从.的下一个位置到文件的最后,最后得到扩展名
String ext = fileName.substring(fileName.lastIndexOf(".") + 1, fileName
.length());
// 对扩展名进行小写转换
ext = ext.toLowerCase();
//判断是否有上传联盟图片
if(CepStringJudgeUtils.StrisNull(fileName)) return null;
boolean flag=true;
if(fileTypes!=null && fileTypes.size()>0){
if (fileTypes.contains(ext)) {
}else{
flag=false;
}
}
Blob allImages=null;
String errors="";
if (flag) { // 如果扩展名属于允许上传的类型,则创建文件
try {
if(imgFile!=null){
allImages = Hibernate.createBlob(imgFile.getBytes());
}
} catch (IllegalStateException e) {
errors="uploadFileByFieldName"+e.getMessage();
} catch (IOException e) {
errors="uploadFileByFieldName"+e.getMessage();
}
} else {
errors="uploadFileByFieldName.filetype.error";
return null;
}
System.out.println("####blob2:"+allImages);
System.out.println("####imgFile:"+imgFile.getOriginalFilename());
Object[] obj={allImages,ext,errors};
return obj;
}
return null;
}上面的代码是调用的spring的上传控件获得的blob对象,
对于你的这种说法我是不能认同的.