我删除了些内容,也没有捕获异常 并且这些代码未经过简化,但是整体思路是正确的
先说下整体思路,
1 数据库中字段类型是byte[]
2 action 中接受的是File 类型
3 将File 类型转换成byte[]类型 File > BufferedInputStream>InputStream>byte[] (网上搜索下就好了)
剩下就看hibernate的啦
<form action="workflow!add" method="post" enctype="multipart/form-data">
<table class="tableEdit" style="width:580px;" cellspacing="0" border="0" cellpadding="0">
<td class="tdEditLabel" >请选择流程定义文件</td>
<td class="tdEditContent"><input type="file" name="processDefinition">
<td class="tdEditLabel" >请选择流程定义图片</td>
<td class="tdEditContent"><input type="file" name="processImage"></td>
</table>
</form>
Action 中
import java.io.File;
public class A extends ActionSupport
{
private File processDefinition;
private static final int BUFFER_SIZE = 2 * 1024 * 1024;
public void setProcessImage(File processImage) {
this.processImage = processImage;
}
public String execute() throws Exception {
InputStream indefStream = null;
ByteArrayOutputStream bytedefstream = new ByteArrayOutputStream();
InputStream indefStream = new BufferedInputStream(new FileInputStream(processDefinition),BUFFER_SIZE);
int ch;
while (indefStream!=null&&(ch = indefStream.read()) != -1) {
bytedefstream.write(ch);
}
indefStream.close();
byte defdata[] = bytedefstream.toByteArray();
ProcessDefinition pd = ProcessDefinition.parseXmlInputStream(new ByteArrayInputStream(defdata));
this.getJbpmContext().deployProcessDefinition(pd);
WorkFlow workFlow = (WorkFlow) this.getSession().createQuery(
"select w from WorkFlow w where w.name = ?").setParameter(0,
pd.getName()).uniqueResult();
if (workFlow == null) {
workFlow = new WorkFlow();
workFlow.setName(pd.getName());
workFlow.setProcessDefinition(defdata);
this.getHibernateTemplate().save(workFlow);
}
return "index";
}
}
将File 类型转化为 byte[] 类型
WorkFlow 实体类中 processDefinition是 byte[] 类型