电商项目经验杂记2
1.前端接收后端返回数据时的问题
在写用户信息加载的时候,前端ajax请求成功发到后端,也成功返回了json格式的字符串,但取json中的属性值就是不成功。
最后发现,success中的回调函数的参数不能直接为data,然后data.username,而是json.data.username
这里有个前端小知识点:设置单选框radio是否选中要用prop函数,即:选择器.prop(‘checked’,true)
2.在做头像上传业务功能时的一些收获
(这个因为没接触过,所以记了挺多东西)
文件上传的文件处理以及异常规划类都写在控制层内,因为带有文件数据包,层与层之间传递包影响效率
文件上传时,使用SpringMVC中提供的MultipartFile接口作为控制器的参数,接收前端发来的文件内的数据包\
前端页面这里采用form表单进行提交,必须要填enctype属性
上传头像时,当上传的头像大于设定的10MB时,不按预期抛出自定义异常,而是抛出了tomcat的FileSize异常
问题的根源:tomcat默认设置能接收HTTP POST请求的大小最大为2M,如果你的POST请求传递的数据大于2M,就会报错误。
解决的办法:修改tomcat的配置文件C:/MinyooCMS/tomcat/conf/server.xml(或者安装在D盘文件路径是D: /MinyooCMS/tomcat/conf/server.xml),找到里面的标签,在该标签中添 加”maxPostSize”属性,将该属性值设置成你想要的最大值,单位是字节,或者把这个值设置为 0(maxPostSize=”0”),tomcat将不再检查POST的大小。即可解决上述问题。
springboot的项目使用的都是内嵌的Tomcat服务器,因此不好按上述修改配置文件。
可以在springboot的主配置文件中声明最大文件设置:
修改头像向后端传输的是文件,而serio()只能用来传递字符串等类型的表单参数,
所以这里data属性因使用js中的FormData对象来封装并传递文件数据,并且要设置processData和contentType属性,如下:最后在前端页面中使用了cookie技术,将上传的头像保存在cookie中,并设置过期时间为7天
这样在有效期内每次需要展示用户头像的时候,都不需要再查数据库,而是直接从cookie中取即可
对应的实现代码在本机的:E:\src_htt\Spring\projects\computer_store\src\main\resources\static\web\upload.html 中
这个头像上传还可以做优化,比如Controller层可以简化,把业务逻辑和异常处理都放在业务层
(不过在控制层也有好处就是减少数据传输造成性能损失)