Java中上传文件和表单数据提交如何保持数据的一致性?
2017-09-04 17:51
525 查看
学生申请学科竞赛活动,表单中有学科竞赛的申报信息和部分附件,需要做到将上传文件和表单数据提交保持一致性。
将上传文件和插入表单数据放到事务汇总去处理,由于表单的数据我们可以控制,但是上传的文档不好控制。一方面我就把表单数据提交放置在文件上传前面,这样当表单数据提交发生异常我们可以回滚,文件并未上传,当文件上传发生异常时,我们可以回滚数据库的数据,只有当文件正常上传时我们才提交数据库数据。。。
---------------------------------------------------------------------------------------------------------------------------------------
将上传文件和插入表单数据放到事务汇总去处理,由于表单的数据我们可以控制,但是上传的文档不好控制。一方面我就把表单数据提交放置在文件上传前面,这样当表单数据提交发生异常我们可以回滚,文件并未上传,当文件上传发生异常时,我们可以回滚数据库的数据,只有当文件正常上传时我们才提交数据库数据。。。
---------------------------------------------------------------------------------------------------------------------------------------
1 @Override 2 public boolean applActivity(XkTeam team, Document doc, DocType doctype, 3 FileInputStream fin) { 4 5 boolean flag = true; 6 FileOutputStream fos = null;//文档输出流 7 // ------------处理需要向数据库提交的文档、文档类型及申报信息-------------------- 8 // 开启事务,设置不自动提交 9 JDBCTools.startTransaction(); 10 11 try { 12 // 判断是个人申报还是团体申报调用不同的方法 13 // 个人申报 14 if (team.getAppType() == 0) { 15 16 flag = idao.addPersonApp(team); 17 //更新当前申报人数 18 flag = idao.updateCurrentNum(team.getAppType(),1); 19 } 20 21 // 团体申报 22 if (team.getAppType() == 1) { 23 24 25 flag = idao.addTeamInfor(team); 26 flag = idao.addTeamMember(team.getMemberlist()); 27 //更新当前申报人数 28 flag = idao.updateCurrentNum(team.getActiId(), team.getMemberlist().size()); 29 } 30 31 if(doc != null && doctype != null){ //处理用户是否上传文档 32 // 调用dao层插入文件的方法 33 flag = idao.addDocument(doc); 34 // 调用dao层插入文件类型方法 35 flag = idao.addDocType(doctype); 36 37 // ---------------处理上传文档------------ 38 // 1.创建上传文档File 39 File file = new File(doc.getDoc_path()); 40 // 2.创建写文档对象 41 fos = new FileOutputStream(file); 42 // 3.创建缓冲流 43 byte[] buffer = new byte[1024]; 44 int len = 0; 45 while ((len = fin.read(buffer)) > 0) { 46 // 写入文件 47 fos.write(buffer, 0, len); 48 } 49 } 50 // 提交 51 JDBCTools.commit(); 52 } catch (Exception e2) { 53 e2.printStackTrace(); 54 // 发生异常回滚 55 JDBCTools.rollback(); 56 throw new RuntimeException("申报失败,请联系管理员!", e2); 57 } finally { 58 // 关闭资源 59 JDBCTools.setCommitTrue(); 60 JDBCTools.close(); 61 62 if(fos != null){ 63 try { 64 fos.close(); 65 } catch (IOException e) { 66 e.printStackTrace(); 67 } 68 } 69 } 70 71 return flag;
相关文章推荐
- Java中,当表单含有文件上传时,提交数据的如何读取
- Java中,当表单含有文件上传时,提交数据的如何读取
- Java中,当表单含有文件上传时,提交数据的如何读取
- Java中,当表单含有文件上传时,提交数据的如何读取 .
- Java中,当表单含有文件上传时,提交数据的如何读取
- Java中,当表单含有文件上传时,提交数据的如何读取
- Java中,当表单含有文件上传时,提交数据的如何读取
- Java web中,当表单含有文件上传时,提交数据的如何读取
- Java中,当表单含有文件上传时,提交数据的如何读取
- Java中,当表单含有文件上传时,提交数据的如何读取(吐血版)
- Java中,当表单含有文件上传时,提交数据的如何读取
- Java中,当表单含有文件上传时,提交数据的如何读取
- Java中,当表单含有文件上传时,提交数据的如何读取(感谢作者分享)
- 使用java ssm框架后台模拟post上传文件并提交表单数据
- 用java模拟html表单(form)提交数据包含多文件上传表单提交。
- c# 模拟表单提交,post form 上传文件、大数据内容
- Multipart/form-data POST文件上传详解 理论 简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交数据,都是通过form表单提交的,代码如下: <form me
- java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例
- JavaWeb -- Struts2,对比, 简单表单提交,校验,防重复提交, 文件上传