我们都知道activiti的act_ge_bytearray表中存放着我们的资源文件,那么怎么把它下载下来存放到电脑上呢
从表中读取资源文件
步骤:
- 获取processEngine对象
- 获取RepositryService对象
- 得到ProcessDefinitionQuery
- 设置查询条件
- 执行查询操作,查询出流程定义
- 根据流程定义信息,得到部署的id
- 输入流InpueStream读取bpmn文件信息
- 输出流OutputStream
- IO流转换
- 关闭流
第一步:提取代码进行封装FileToCreateUtil文件创建类
public class FileToCreateUtil {
public static File getOs(String name) throws IOException {
String fileN="E:\\项目\\csdn\\Activiti\\代码\\读取的资源文件存放地址\\";
File file=new File(fileN+name);
if (!file.exists()) {
// 1,先得到文件的上级目录,并创建上级目录
file.getParentFile().mkdirs();
try {
// 2,再创建文件
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
return file;
}
}
第二步:创建BpmnFile类
public class BpbmFile {
public static void main(String[] args) throws IOException {
//1:获取processEngine对象
ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
//2:获取RepositryService对象
RepositoryService repositoryService=processEngine.getRepositoryService();
//3:得到ProcessDefinitionQuery
ProcessDefinitionQuery processDefinitionQuery=repositoryService.createProcessDefinitionQuery();
//4:设置查询条件
processDefinitionQuery.processDefinitionKey("day");
//5:执行查询操作,查询出流程定义
ProcessDefinition definitionQuery = processDefinitionQuery.singleResult();
//6:根据流程定义信息,得到部署的id
String deploymentId=definitionQuery.getDeploymentId();
//7:输入流InpueStream读取bpmn文件信息
InputStream bpmnIns=repositoryService.getResourceAsStream(deploymentId,definitionQuery.getResourceName());//参数:部署Id和资源名称
//8:输出流OutputStream (definitionQuery.getResourceName()可以替换成自定义)
OutputStream bpmnOs= new FileOutputStream(FileToCreateUtil.getOs(definitionQuery.getResourceName()));
//9:IO流转换
IOUtils.copy(bpmnIns,bpmnOs);
//10:关闭流
bpmnOs.close();
bpmnIns.close();
}
}
运行结果:
补充知识点:
definitionQuery.getDiagramResourceName()获取png图片文件的名称(其余步骤一样)
原创文章,未经允许禁止盗用