关于前端选择上传图片之一块花了我一下午的时间,先说后端这一块的代码:
先导入所需的依赖就不说了,之后是在springMVC.xml中配上multipartResolver这个bean,再然后配上上传的大小。这是环境方面的,controller中的上传文件的方法需要有一个重要的参数是
@RequestParam("file") MultipartFile upload
这个参数就是你从前端传过来的二进制文件对象,@RequestParam的参数和前端里name属性的值保持一致。
然后通过:
upload.transferTo(new File(path,filename)),上传。
filename自定义,但是这个path就有讲究了。因为服务器重启,会把项目中非静态资源下的所有东西清空,所以上传的图片不能放在项目下,要放在其他地方,这时候就需要配置tomcat进行虚拟路径的配置,以后可以直接访问这个地址而不通过项目。(设置时是设置绝对路径,访问时访问虚拟路径)。当然上传的图片也放在这个绝对路径。
之后就是前端这一块,使用uni.uploadFile方法:(默认POST和multipart/form-data):
其实问题并不大,只是我当时复制官方测试源码直接使用,把最后的取消上传这一块的代码也复制了,导致每次都上传失败,最后终于解决,一下午的时间也过去了。
晚上开始写数据的交互,把电影的数据从前端传到后端再写入数据库。其中uni.uploadFile有一个参数是formData,值是一个对象,可以把一些数据传到后端,而后端可以使用request.getParam那个方法获取键值,但都是字符串,显然对象值是数组的就不行了。我尝试使用@requestBody等各种方法都无法封装,最后只能都转化成字符串,到后端再解析了。
后端解析其实不难,最主要是后端的代码逻辑我考虑了许久,首先是先写数据还是先上传图片,是分批执行,还是放在一个service,不放在一个service里怎么处理异常,其中任何一个发生错误了如何回滚另一个,这是一方面。
其次是关于代码耦合,这一块主要设计多张表同时操作,所以搜索了关于层与层之间调用的各种建议:
首先是dao层建议不要互调,service层建议不要互调,service可以调多个dao,或者在service上再加一层facade做成四层,由于我这工程太小完全用不到所以就不考虑。还有就是controller是否可以调多个service,service的某个方法是否可以不调dao只完成一些逻辑处理,每个人的说法都不同。其实这一块都只是减少代码的耦合,方便维护,我现在可能还处理不了那么多。
一晚上也过去了。