00:01
哎,这边这个图详情图片这个演完事以后呢。别的信息吧,就是别的就都属于普通的像字串这样的信息了,就已经都存到project VO里边了,哎,所以说我们下一步呢,就把project这个VO呢。呃,存到这个session的里边。哦,我看看啊,我是不是写错地方了。嗯。看这个打括号啊。我便利这个集合哈。这个事儿,这个事儿这些呢,不应该放在这个衣服里边。对吧,就是说你这个头图没有的话。呃,投诉没有,那可人家可能人家详情的图片,可能人家有啊,所以这边咱们。嗯。把这部分得从这个if里边给它拿出来。
01:01
这个这个刚才这个代码长了以后呢,你就得去注意了啊,代码长了以后就注意你这个有时候看这个大括号已经看不见它前面是从哪开始的了。啊,再说你自己这个心里得有数,你看看这个大括号跟哪个哪个到哪是哪是对应的啊。这从这到这儿一直都是上传这个头图的,从这开始往下呢,是上传这个详情的这个图片的。这边这个完事以后呢。再下一步呢,这个就是说我们这个,呃。呃,第十个下一步就是将。我们这个project这个VO对象去存入到我们的三人域。三点。Set attribute。哎,这个时候咱们也给他来一个属性名。
02:03
哎,这是一个临时的。Project。哎,为啥临时的呢,它存到其实是存到30里边吧,本质上它是存到red里边了。哎,然后呢,等我们最后呢,全部收集完了以后啊,发送给买搜狗以后,这边这个临时的就要就可以把它给干掉了。就不要他了。哎,这是一个属性名。这个就是temple。啊,这么个点。这个value呢,是project view。哎,存一下存一下这边别的没啥啊,这边咱们就让他就回到我们的。
03:00
呃,去下一个页面。去下一个页面。下一个页面呢,就是填这个回报的信息啊,填回报信息。嗯。啊,就是说这个,其实这个我们可以考虑呢,就是说去重新向到这个地方啊,它刷新页面也不会把刚才那个也不会再重新去提交了啊。Control c。哎,访问这个地址。去就参照这个view controller访问他。然后去我们两。不是这个还没写呢,还。是不是还没写呢?Project配置。然后这个呢,应该是一个。Return。Info page。这边呢。把这个拿过来。叫project啊,对,我们应该访问他哈。幸亏看了一眼。
04:02
哎,发到这个地址。去下一个表单页面。对,我把。嗯。啊对,后边还得写一个project,对,不然的话这个纯对象它就跟不走住这了。他就30那个就就带不过来了啊。以这个完整的访问路径啊,我们去前往。呃,前往这个叫呃。那什么的页面啊,这个叫前往。下一个。叫收集回报。信息的这个页面。啊,这是我们这个其他其他的这个这个handle方法里边其他的一个操作哈。嗯。这里边儿这个逻辑上,我们可以给他再再给他整的严密一点哈,就是说如果我们觉得比较介意的话。
05:02
就是说你看在这个handle的方法里边吧,其实分这么三个大块哈,第一个是头图,详情的图片存。那么如果我们想让它更严谨一点,你要头图要没有的话呢,你也不是一个有效的信息。不是一个完整信息,我们就可以给他打回去啊。所以说在这儿的话呢。嗯。这是它不为空啊,这是有这个有效数据的情况啊,这咱们可以这样。我把这个东西呢,放到它的这个else里面。啊或者也可以,嗯,可以这样啊,就是说它如果是为空的。直接呢,跟跟这儿。跟这儿一样。哎,就是说呢,你头图如果是空的。我直接就就回到之前的页面了,我后边就不走了啊,后边就不走了,一会儿号一会儿调一下啊。
06:00
完成。抠图上传啊,这个首先呢。这个改成这个大写的一。完成投诉上传,然后这里边儿这个第一步。是去获取啊当前。这个。呃,这个对象哈。是否为空?这个判断一下啊,如果为空的话。这是上传,这是失败哈,这我们现在这个不是失败,我们现在这个是头头是空的。这是一个M。哎,就是他头图如果是空的。头土不可为空。
07:01
哎,带这么一个消息。呃。如果没有上传头图,则。呃,返回到表单页面啊,显示这消息。这是第一步,这是第二步。第三步啊,它不为空,再执行上传,执行上传的话呢,呃,这边判断上传是否成功。如果要是成功的话。则从返回数据中呢获取图片访问的路径存到这里面,这是第六步。嗯,如果上传失败。哎,就也是会回去啊,后边就不走了,哎,必须得保证前一个操作成功了,再往后边走。呃,然后呢,到这儿开始,这是这个第二个大的步骤。哎,这是上传这个详情的这个图片。
08:02
哎,首先呢,是先去创建一个集合啊,存放将来存放这个路径。然后呢,这个第二步的话。遍历一下这个集合。哎,便利一下这个计划。呃,判断他是否为空。嗯。他上传一次性上传好多。他什么情况下会有这种情况啊,他这个对象是有的,但是is empty呢,返回的是空的。就是大家看会有这样一种情况,比如比如说假设哈,你新建了一个文本文件。这个文件是有的,但是这个文件的大小呢,你看是零。这个文件的大小是零,你要在我们这个multi part file这检测,EMT就是空的。有这种情况啊,所以说呢,在这儿它如果是空的的话呢。也可以去判断一下啊。
09:04
哎,就跟刚才这边呢,咱们整一个一样的哈。哎,这个这个。呃,给他再来一个消息,这是这这是什么,什么为空呢?这是一个detail。Pick被控。嗯。那个也是也是检测也是MT也是空的。你要是没有船的话,上传它也是空的。嗯,这个这个是说我这个详情图片。你意思是再检查一下这个。
10:03
那就是这个呗。来判断一下这个。对,检查这个list是否有效。如果等于now。或者是。嗯。那就也整一个这个,那反正就是说这个他不能为空。嗯。然后这个是不为空,排除这个情况以后再到第三步。到第四步这边第五步。这边是说呢,这边哎。嗯,检测到单个的。呃,检测到详情图片中单个。文件为空啊。呃,也是。
11:02
回去显示错误消息。那这边如果是这个当前这个文件已经这return呢,这边就不用判断了,就把这个拿拿拿到外边来。这个if就不用写了。呃,然后呢,五六执行上传,七检查上传的结果。呃,上传成功的话呢,就继续走。但是如果要是失败的话。不整那么细了。不整那么细了,我压根就没打算去测试这个这个失败的这个情况。我只是觉得,我只是觉得可能你们我这边不写的话,你们不会放我过去。
12:02
其实这么整的话,其实这么整只是我们现在没有分布式事物的相关的东西的这个支持。这么整是用户体验是很不好的。他一共假设他一共要上传十几个图片。其中有任何一个上传失败,他就我们就给他打回去。啊,你这次是这个图片是失败的,下次这个图片失败了,下次这个图片失败了。这个老给他打过去,如果说这个网络状态不太好的话啊,他就幸运的话,他一次性就成功了,里边有一个失败的话,就就给他打过去,这个用户体验其实是很不好的。而且呢,其实你第一次第一次上传这些。这个失败了,是你没传,其他这些呢,你都传上去了,传上去以后呢,你在oss这边呢,是真真正正的是这个文件是存在这这里边的。但是呢,它的访问的路径没有存到数据库里边,这个这个图片呢,在oss上面就是一个死的图片,永远访问不到了。永远访问不到的图片还在这上面,还占着这个存储的空间。
13:02
啊,所以说呢,像这种情况吧。这个死的图片呢,需要需要你去定期的呢,比如说你隔上三个月五个月半年啊,或者甚至于说隔一年的时间,你去专门执行一个程序呢,到这里边儿去清理一下。把那些死的没有链接的对应的图片呢,去给他们删一下,不用天天的去去整。这个空间呢,一般这种存文件呢,它一般空间都比较大。啊,他一时半会他也不会说,就占很大的空间,所以说这隔挺长时间呢,你就清一下,把这些死的去给它清,清一清。啊,就节约一些空间。啊,但是这个用户体验确实是会不太好啊。所以说我们现在呢,只是说我们眼下呢,只能是说前面一步不成功就不往后走啊。所采取的是这样一种这个办法。789上传图片。啊,这是我们的详情的图片。Detail pick upload file。
14:18
还是这个再回来哈,这边是成功的话走这,失败的话走这。这里边儿其实就是说你看这是在一个循环的里边,意思是这里边儿有任何一个上传失败的话,他就会都会给你打回去啊,这个挺残酷的哈。这个还是很严苛的。然后呢,十。啊,就这这后边这对这是第三个大的步骤。第三个大的步骤啊。就是这个,呃。叫啥呢?叫做。呃。哎,这个对,这个应该是这个还应该算前面的哈。第三个大的步骤啊,这个。
15:01
呃,后续的操作。哎,存到三神域里面,然后呢,完整路径返回哈,就是这个。就是我们写的话,我们觉得应该是这么一个逻辑哈,分三大块儿,每一大块里边呢,还有很多详细的操作。啊,那剩下的事儿就是得去测试一下这个。能不能成功?
我来说两句