// 保存一个附件记录 private Attach saveAttachLog( HttpServletRequest request, String localFile, String ptype, String puid, SystemContext context, String extend, long size, Calendar now, String path, boolean absolute) { // 剔除文件名中的路径部分 int li = localFile.lastIndexOf("/"); if (li == -1) li = localFile.lastIndexOf("\\"); if (li != -1) localFile = localFile.substring(li + 1); // 创建附件记录 Attach attach = new Attach(); attach.setAuthor(context.getUserHistory()); attach.setPtype(ptype); attach.setPuid(puid); attach.setFormat(extend); attach.setFileDate(now); attach.setPath(path); attach.setSize(size); attach.setSubject(localFile); attach.setAppPath(!absolute); attach = this.getAttachService().save(attach); // 创建附件上传日志 AttachHistory history = new AttachHistory(); history.setPtype(Attach.class.getSimpleName()); history.setPuid(attach.getId().toString()); history.setType(AttachHistory.TYPE_UPLOAD); history.setAuthor(context.getUserHistory()); history.setFileDate(now); history.setPath(path); history.setAppPath(false); history.setFormat(attach.getFormat()); history.setSubject(attach.getSubject()); String[] c = WebUtils.getClient(request); history.setClientIp(c[0]); history.setClientInfo(c[2]); this.getAttachService().saveHistory(history); return attach; }
public Attach getAttach( String subject, String code, Map<String, Object> args, String ptype, String puid, ActorHistory author, Map<String, Object> formatParamSql) throws Exception { Assert.hasText(subject, "subject is Empty"); Assert.hasText(code, "code is Empty"); Assert.hasText(ptype, "ptype is Empty"); Assert.hasText(puid, "puid is Empty"); Template template = this.templateDao.loadByCode(code); if (template == null) throw new CoreException("Template code:" + code + " not find entity!"); if (args == null) args = new HashMap<String, Object>(); if (author == null) { if (SystemContextHolder.get() == null) { author = this.actorHistoryService.loadByCode("admin"); } else { author = SystemContextHolder.get().getUserHistory(); } } Map<String, Object> args4Param = this.getMapParams(template.getId(), formatParamSql); if (args4Param != null) // 最终替换参数 args.putAll(this.getMapParams(template.getId(), formatParamSql)); // 生成附件 Attach attach = new Attach(); attach.setAuthor(author); attach.setFileDate(Calendar.getInstance()); attach.setSubject(subject); attach.setAppPath(false); attach.setFormat(template.getTemplateType().getExtension()); attach.setStatus(BCConstants.STATUS_ENABLED); attach.setPtype(ptype); attach.setPuid(puid); // 文件存储的相对路径(年月),避免超出目录内文件数的限制 Calendar now = Calendar.getInstance(); String datedir = new SimpleDateFormat("yyyyMM").format(now.getTime()); // 要保存的物理文件 String realpath; // 绝对路径名 // uuid String fileName = UUID.randomUUID().toString().replace("-", "") + "." + template.getTemplateType().getExtension(); // 不含路径的文件名 realpath = Attach.DATA_REAL_PATH + "/" + datedir + "/" + fileName; // 构建文件要保存到的目录 File file = new File(realpath); if (!file.getParentFile().exists()) { if (logger.isInfoEnabled()) { logger.info("mkdir=" + file.getParentFile().getAbsolutePath()); } file.getParentFile().mkdirs(); } OutputStream out = new BufferedOutputStream(new FileOutputStream(file)); this.formatTo(template.getCode(), args, out); // 设置附件大小 attach.setSize(new File(realpath).length()); // 设置附件相对路径 attach.setPath(datedir + "/" + fileName); return this.attachService.save(attach); }