需求
上传的bpmn和png虽然入库了,但是用户或者开发人员需要对已经部署过的资源文件进行再次查看
涉及activiti库表
act_re_procdef
方案
利用文件输入流,根据流程定义id和要查看的资源文件类型(bpmn或png)进行查看
前端核心代码:
<td class=category><a href="${baseurl}/flow/queryProcessDefinitionResource.action?processDefinitionId=${processDefinition.id}&resourceType=bpmn" target="_blank">查看bpmn</a></td>
<td class=category><a href="${baseurl}/flow/queryProcessDefinitionResource.action?processDefinitionId=${processDefinition.id}&resourceType=png" target="_blank">查看图片</a></td>
后台controller核心代码:
@Autowired
private RepositoryService repositoryService;
/**
*
* <p>Title: queryProcessDefinitionResource</p>
* <p>Description: 流程定义资源文件查看</p>
* @param response 输出对象
* @param processDefinitionId 流程定义id
* @param resourcesType 资源文件类型(bpmn和png)
* @throws Exception
*/
public void queryProcessDefinitionResource(HttpServletResponse response,String processDefinitionId,String resourceType)
throws Exception{
//根据流程定义id获取流程定义对象
ProcessDefinition processDefinition = repositoryService
.createProcessDefinitionQuery()
.processDefinitionId(processDefinitionId)
.singleResult();
//部署id
String deploymentId = processDefinition.getDeploymentId();
//资源文件名称
String resourceName = null;
if (resourceType.equals("bpmn")) {
//bpmn资源文件名称
resourceName = processDefinition.getResourceName();
}else if (resourceType.equals("png")) {
//png资源文件名称
resourceName = processDefinition.getDiagramResourceName();
}
//资源文件输入流
InputStream inputStream = repositoryService.getResourceAsStream(deploymentId, resourceName);
//流复制
byte[] b = new byte[1024];
int len = -1;
while ((len = inputStream.read(b,0,1024)) != -1) {
response.getOutputStream().write(b,0,len);
}
}
效果图: