CGB2102-京淘项目day17
1. 商品业务处理
1.1 实现文件上传
1.1.1 编辑ImageVO对象
1.1.2 编辑FileController
@RestController
@CrossOrigin
@RequestMapping("/file")
public class FileController {@Autowiredprivate FileService fileService;@PostMapping("/upload")public SysResult upload(MultipartFile file) throws IOException {ImageVO imageVO = fileService.upload(file);if(imageVO == null){return SysResult.fail();}return SysResult.success(imageVO);}}
1.1.3 编辑pro配置文件
image.localPathDir=D:/JT_IMAGEimage.localUrlPath=http://image.jt.com
1.1.4 编辑FileService
@Service
@PropertySource("classpath:/properties/image.properties")
public class FileServiceImpl implements FileService{//为属性动态赋值 注解@Value@Value("${image.localPathDir}")private String localPathDir; // = "D:/JT_IMAGE";@Value("${image.localUrlPath}")private String localUrlPath; // = "http://image.jt.com";//1.参数 ~~~已知条件//2.干什么 ~~~ 实现文件上传//3.返回值: void ImageVO 有效返回/*** 文件上传案例实现* 1.如何保证前端是上传的数据是有效的!!* 1.1 校验文件的名称检查是否为图片* 1.2 校验是否为恶意程序.* @param file* @return*/@Overridepublic ImageVO upload(MultipartFile file) throws IOException {//1.1校验是否为图片类型 abc.jpg ABC.JPG 文件大小写String fileName = file.getOriginalFilename();//将所有的文件名称转化为小写fileName = fileName.toLowerCase();if(!fileName.matches("^.+\\.(jpg|png|gif)$")){return null;}//1.2 校验图片类型是否为木马try {BufferedImage bufferedImage = ImageIO.read(file.getInputStream());int width = bufferedImage.getWidth();int height = bufferedImage.getHeight();if(width == 0 || height == 0 ){return null;}}catch (Exception e){return null;}//2. 目录结构//2.1 实现分目录存储... 可以以时间维度进行分隔 /yyyy/MM/dd/String datePath =new SimpleDateFormat("/yyyy/MM/dd/").format(new Date());//2.2 进行目录的拼接 "D:/JT_IMAGE/2021/11/11";String localDir = localPathDir + datePath;//2.3 需要创建目录File dirFile = new File(localDir);if(!dirFile.exists()){dirFile.mkdirs();}//3.文件名称重复 采用UUID防止文件重名 uuid.jpgString uuid = UUID.randomUUID().toString().replace("-", "");//fileName = abc.jpgString fileType =fileName.substring(fileName.lastIndexOf("."));String realFileName = uuid + fileType;//c:jt_image/2021/11/11/uuid.jpgString filePathAll = localDir + realFileName;//实现文件上传File realFile = new File(filePathAll);file.transferTo(realFile);//2021/11/11/uuid.jpgString virtualPath = datePath + realFileName;//http://image.jt.com/2021/11/11/uuid.jpgString urlPath = localUrlPath + virtualPath;return new ImageVO(virtualPath,urlPath,realFileName);}}
1.2 实现图片删除
1.2.1 编辑页面JS
1.2.2 编辑FileController
//实现文件的删除功能//URL: /file/deleteFile@DeleteMapping("/deleteFile")public SysResult fileRemove(String virtualPath){fileService.fileRemove(virtualPath);return SysResult.success();}
1.2.3 编辑FileService
//如何实现文件删除?? virtualPath: 2021/11/11/uuid.jpg@Overridepublic void fileRemove(String virtualPath) {String filePath = localPathDir + virtualPath;File file = new File(filePath);//删除文件file.delete();}
1.3 富文本编辑器实现
1.3.1 导入样式
1.3.2 导入富文本CSS样式
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import './plugins/element.js'
import './assets/css/global.css'
import './assets/ali-icon/iconfont.css'/* 导入富文本编辑器 */
import VueQuillEditor from 'vue-quill-editor'/* 导入富文本编辑器对应的样式 */
import 'quill/dist/quill.core.css' // import styles
import 'quill/dist/quill.snow.css' // for snow theme
import 'quill/dist/quill.bubble.css' // for bubble theme
/* 导入axios包 */
import axios from 'axios'/* 设定axios的请求根目录 */
axios.defaults.baseURL = 'http://localhost:8091/'
/* 向vue对象中添加全局对象 以后发送ajax请求使用$http对象 */
Vue.prototype.$http = axios/* 将富文本编辑器注册为全局可用的组件 */
Vue.use(VueQuillEditor)//定义格式化价格的过滤器
Vue.filter('priceFormat',(price) => {return (price/100).toFixed(2)
})Vue.config.productionTip = falsenew Vue({router,render: h => h(App)
}).$mount('#app')
1.4 实现商品新增
1.4.1 商品新增的数据结构
1.商品的基本信息 item
2. 商品的参数信息 注意每个商品都应该有自己单独的参数 item_param
3. 商品详情信息 每个商品都应该有自己的详情 (大字段存储) item_desc
1.4.2 商品新增的JS
1.4.3 商品新增业务接口
数据返回值:
1.4.4 关于JSON转化API
说明: 使用ObjectMapper 实现对象的转化
1). writeValueAsString 表示将对象转化为JSON
2). readValue 表示将JSON串转化为对象
@Testpublic void toJSON() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();ItemParamVO itemParamVO = new ItemParamVO();itemParamVO.setParamId(1);itemParamVO.setParamVals("100");ItemParamVO itemParamVO2 = new ItemParamVO();itemParamVO2.setParamId(1);itemParamVO2.setParamVals("100");List list = new ArrayList();list.add(itemParamVO);list.add(itemParamVO2);String json =mapper.writeValueAsString(list);//JSON转化为对象List<ItemParamVO> list2 = mapper.readValue(json, List.class);System.out.println(list2);}
1.4.5 编辑ItemController
1.4.6 编辑ItemService
/*** 实现三张表入库 商品表/商品详情表/商品参数表* @param itemVO*/@Transactional@Overridepublic void saveItem(ItemVO itemVO){//1.入库商品表Item item = itemVO.getItem();item.setStatus(true); //默认启用状态//要求入库之后返回主键//MP如果设定了主键自增则会自动的实现数据回显itemMapper.insert(item);//2.入库商品详情ItemDesc itemDesc = itemVO.getItemDesc();itemDesc.setId(item.getId());itemDescMapper.insert(itemDesc);//3.入库商品参数//1.一个商品应该有自己的单独的参数. 动态参数/静态属性 KYE-VLAUE [key:value,key2:value2]ItemParam itemParam = itemVO.getItemParam();ItemParamVO[] dynamic = itemParam.getDynamicArray();ItemParamVO[] staticParam = itemParam.getStaticArray();try {//将页面传递的数据转化为JSON,之后数据库保存String dynamicJSON = MAPPER.writeValueAsString(dynamic);String staticJSON = MAPPER.writeValueAsString(staticParam);//封装商品参数信息itemParam.setDynamicArgs(dynamicJSON).setStaticArgs(staticJSON).setId(item.getId());//实现入库操作itemParamMapper.insert(itemParam);} catch (JsonProcessingException e) {e.printStackTrace();//如果程序执行报错 则抛出异常throw new RuntimeException(e);}}
CGB2102-京淘项目day17相关推荐
- boot sprint 项目结构_京淘项目03 08.28
JSP动态web资源,打war包 ##spring boot整合JSP 创建项目 spring SpringBoot整合web资源,, 在main文件下,新建webapp文件夹,,把WEBINF目录粘 ...
- 京淘项目实战开发-01
1.京淘项目架构设计 1.1电商网站行业特点 1.1.1 高并发 概念: 同一时间内,有大量的用户访问服务器. 常识: tomcat服务器能够支持的并发链接数 220个/秒 (软件依赖硬件设备) 生产 ...
- Lesson9 【LINUX】将京淘项目发布到Linux系统上
前言 将京淘项目发布到Linux系统上 我在windows系统中已经用IDEA编写好了京淘项目的代码,并且打好了war包. 现在我就想把这个京淘项目发布到linux系统上. 因为在工作中,都是要将项目 ...
- 2003京淘项目Day-03京淘后台项目搭建
1.SpringBoot 整合JSP 1.1 创建项目 1.1.1 创建项目 1.1.2 编辑POM.xml文件 添加继承/依赖/插件 <!--parent标签作用:管理所有被springBoo ...
- 京淘项目Day-04
1.关于项目打包/发布问题说明 1.1 利用maven工具项目打包 说明: 父级JT 其中包含了2个子级项目 jt-manager 依赖于jt-common.所以项目打包是有顺序的. 1.2 mave ...
- 【后端结合】新程序猿笔记Day13(京淘项目)
1. 用户模块管理 1.1 用户列表展现 1.1.1 业务接口文档 请求路径: /user/list 请求类型: GET 请求参数: 后台使用PageResult对象接收 请求案例: http://l ...
- 京淘项目业务接口文档
一 用户登陆 1 用户登录验证接口 请求路径: /user/login 请求方式: POST 请求参数 参数名称 参数说明 备注 username 用户名 不能为空 password 密码 不能为空 ...
- 京淘项目模块分析:用户登;三级列表展现
文章目录 用户登录 用户登录验证接口 返回的SysResult对象 用户登录业务流程 MD5说明 编辑UserController 编辑UserService UserServiceImpl User ...
- 关于京淘项目虚拟机IP修改说明
0. 修改虚拟机MAC地址 当新建虚拟机时,修改mac网络地址. 0.Window 配置IP地址 1).修改IP地址 2).设定IP租用时间 3).检查windowsIP地址 4).检查LinuxIP ...
最新文章
- C# access update 出错总结,注意事项
- 后端接收到信息并返回了但是前端无响应_Bug的噩梦:前端调试必备的7个“大杀器”...
- Python如何创建相同值的数组/列表
- 面试题 04.02. 最小高度树
- springboot 后台模板_spring boot实战
- Discuz!NT实际安装流程
- css的position中absolute和fixed的区别
- GridView的DataFormatString格式化字符串
- 搭建WEB服务器及常见端口扫描工具分享
- matlab中的脚本文件和函数文件
- 运维必备——Zabbix监控系统
- Groovy 字符串
- 数据结构与算法——23. 用嵌套列表与链表实现树结构
- 【概率DP】SRM515 NewItemShop
- PTA基础编程题目集
- codeforces(D2. Coffee and Coursework (Hard Version))二分答案
- 【电路理论】KCL、KVL、线性直流电路各大方法、定理详解
- 广和通5G模组FM650-CN在Win11下的短信和通话演示
- 上海java程序员招聘流程分析
- java中如何删除文件或清除文件夹下的所有文件