Java中上传文件和表单数据提交如何保持数据的一致性?

学生申请学科竞赛活动,表单中有学科竞赛的申报信息和部分附件,需要做到将上传文件和表单数据提交保持一致性。

将上传文件和插入表单数据放到事务汇总去处理,由于表单的数据我们可以控制,但是上传的文档不好控制。一方面我就把表单数据提交放置在文件上传前面,这样当表单数据提交发生异常我们可以回滚,文件并未上传,当文件上传发生异常时,我们可以回滚数据库的数据,只有当文件正常上传时我们才提交数据库数据。。。

---------------------------------------------------------------------------------------------------------------------------------------

 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;

时间: 2024-10-20 07:56:20

Java中上传文件和表单数据提交如何保持数据的一致性?的相关文章

谈谈php中上传文件的处理

这是一个表单的时代... 我们在浏览器中编辑自己的信息,会遇到上传头像:在文库中,我们会上传文档......到处存在“上传”这个词. php是最好的语言(其他语言的程序猿们不要打我...).php在处理交互方面有天然的优势,自然有强大的函数来处理上传文件. 和提交一般的数据一样,上传文件也需要表单.下面建立一个特殊的表单来上传文件. 1 <form enctype="multipart/form-data" action="upload_file.php" n

上传文件form表单enctype=&quot;multipart/form-data&quot;传值解决办法(代原代码)

最近做的一个项目里遇到一个问 题,就是如何在上传文件的表单里传递其它的变量,因为一但form表单用了enctype="multipart/form-data"类型后,所有的值 都是以二进制进行传递的,所以当我们想取出这个表单里传递过来的其它变量的时候,就会遇到一个问题,那就是用request取不到传递过来的变量.在网上 找了很多资料,也都是大至说一下,在这里我就借花献佛发个完整的原代码解决这个问题!!! 工程目录如下: 两个jar可以去apache上下载: http://commons

Mac/Linux/Centos终端中上传文件到Linux云服务器

Mac/Linux/Centos终端中上传文件到Linux云服务器 1.mac上传文件到Linux服务器 scp 文件名 用户名@服务器ip:目标路径如:scp /Users/test/testFile [email protected]:/test/ 2.mac上传文件夹到Linux服务器,与上传文件相比多加了-r scp -r 文件夹目录 用户名@服务器ip:目标路径 如:scp -r /Users/test/testFolder [email protected]:/test/ 3.Lin

微信网页中上传文件时“只能选择SD卡中的文件”问题

需求描述:在微信网页中上传文件到我们自己的服务器,使用 input  type=file标准控件: <input type="file" name="upfile" id="upfile" > 问题来了:苹果可以顺利上传图片文件的,安卓下每次选择完图片文件之后会弹出提示"只能选择SD卡中的文件"不能上传图片.手机已经设置默认存储为SD卡. 百度搜了一个下午没有结果,微信公众平台更没有答案shiiiit. 最后在cs

? 为什么上传文件的表单里要加个属性enctype----摘录

上传文件的表单中<form>要加属性enctype="multipart/form-data",很多人只是死记硬背知道上传表单要这么写,知其然而不知其所以然.那到底为什么要添加这个属性呢?它是什么意思呢?它又有什么其他可选值呢? 其实form表单在你不写enctype属性时,也默认为其添加了enctype属性值,默认值是enctype="application/x-www-form-urlencoded".这个属性管理的是表单的MIME编码,共有三个值可

为什么上传文件的表单里要加个属性enctype

上传文件的表单中<form>要加属性enctype="multipart/form-data",很多人只是死记硬背知道上传表单要这么写,知其然而不知其所以然.那到底为什么要添加这个属性呢?它是什么意思呢?它又有什么其他可选值呢? 其实form表单在你不写enctype属性时,也默认为其添加了enctype属性值,默认值是enctype="application/x-www-form-urlencoded".这个属性管理的是表单的MIME编码,共有三个值可

上传文件的表单

1.使用Apache 的 Commons FileUpload FileUpload下载地址: http://commons.apache.org/fileupload/ 下载:commons-fileupload-1.2.2-bin.zip    得到:commons-fileupload-1.2.2.jar http://commons.apache.org/io/ 下载:commons-io-1.4-bin.zip       得到:commons-io-1.4.jar 2.web.xml

Java上传文件2

文件上传一直是B/S结构中很重要的一项功能,在Java中并没有很好的实现文件上传的类包,因此出现了一些开源的组件,Smartupload ,commons-fileupload,还有国内的一个"牛人"的(不好意思叫不上名字来),这几个组件中Smartupload 出来的时候应该最早,不过现在已经不再有新的版本出现,还有一个不足的地方就是Smartupload 支持上传的文件最大在100M左右,这可满足不了客户的需求,听说commons-fileupload不错,经过几番测试终于搞定,下

JavaScript中上传文件为图片如何读取(UI组件之图片剪裁器)

//获取上传的文件/图片 function getFile(){ var files,len; var reader = new FileReader(); var img_type; addEvent(selectFile,'change',function(){ files = this.files;//selectFile为上传文件表单,this.files获取选择的文件 len = files.length; if(len > 0){ img_type = files[0].type;