文件上传下载

文件下载介绍

文件上传代码实现

服务端上传:

@RestController
@RequestMapping("/common")
@Slf4j
public class CommonController {@Value("${reggie.path}")private String basePath;//从配置文件读取设置好的basePath@PostMapping("/upload")public R upload(MultipartFile file){//file是一个临时文件,需要转存到地址中,否则请求结束就会自动删除//原始文件名String originalFilename = file.getOriginalFilename();//截取文件类型的字符串.jpg/.jpeg等等String substring = originalFilename.substring(originalFilename.lastIndexOf("."));//使用UUID重新生成文件名 防止文件重名导致覆盖String fileName = UUID.randomUUID().toString() + substring;//创建文件路径,并检查文件夹是否存在File dir =new File(basePath);//如果不存在就新建文件夹if (!dir.exists()){dir.mkdirs();}try {//将文件转存到我们指定的文件夹里file.transferTo(new File(basePath+fileName));} catch (IOException e) {throw new RuntimeException(e);}//将fileName返回,后续还会用到return new R(1,fileName);}
}

文件下载实现

@GetMapping("/download")
public void download(String name, HttpServletResponse response){//输入流 读取文件内容try {FileInputStream fileInputStream =new FileInputStream(new File(basePath+name));//输出流,通过输出流将文件写会浏览器,在浏览器展示图片ServletOutputStream outputStream=response.getOutputStream();int len = 0;byte[] bytes=new byte[1024];while ((len=fileInputStream.read(bytes))!=-1){outputStream.write(bytes,0,len);outputStream.flush();}//关闭资源outputStream.close();fileInputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}

新增菜品

准备工作:

梳理交互过程

下拉框数据:

//根据条件查询分类数据
@GetMapping("/list")
public R list(Category category){LambdaQueryWrapper<Category> queryWrapper=new LambdaQueryWrapper<>();//添加条件queryWrapper.eq(category.getType()!=null,Category::getType,category.getType());//添加排序条件queryWrapper.orderByAsc(Category::getSort).orderByDesc(Category::getUpdateTime);List<Category> list = categoryService.list(queryWrapper);return new R(1,"查询成功",list);
}

DishServletImpl:

Service
public class DishServiceImpl extends ServiceImpl<DishMapper, Dish> implements DishService {@Autowiredprivate DishFlavorService dishFlavorService;/*** 新增菜品,同时保存对应的口味数据* @param dishDto*/@Override@Transactionalpublic void saveWithFlavor(DishDto dishDto) {//保存菜品的基本信息到菜品表dishthis.save(dishDto);Long dishId = dishDto.getId();//菜品Id//菜品口味List<DishFlavor> flavors =dishDto.getFlavors();//给集合中的每个菜品口味都附上菜品id值flavors=flavors.stream().map((item)->{item.setDishId(dishId);return item;}).collect(Collectors.toList());//保存菜品口味数据到菜品口味表dish_flavordishFlavorService.saveBatch(flavors);}
}

DishController:

@RestController
@RequestMapping("/dish")
public class DishController {@Autowiredprivate DishService dishService;@Autowiredprivate DishFlavorService dishFlavorService;@PostMappingpublic R save(@RequestBody DishDto dishDto){dishService.saveWithFlavor(dishDto);return new R(1,"新增菜品成功");}
}

菜品分页查询

 DishController:

@GetMapping("/page")
public R page(int page,int pageSize,String name){//构造分页构造器对象Page<Dish> pageInfo =new Page<>(page,pageSize);Page<DishDto> dishDtoPage =new Page<>();//条件构造前LambdaQueryWrapper<Dish> queryWrapper =new LambdaQueryWrapper<>();//添加过滤条件queryWrapper.like(name!=null,Dish::getName,name);//排序条件queryWrapper.orderByDesc(Dish::getUpdateTime);//执行分页查询dishService.page(pageInfo,queryWrapper);//因为我们查询dish的集合中,只查到category的id,不包含category的categoryName//所以要用新建并装进DishDto集合中//对象拷贝 ,排除records数据,pageInfo的records也就是 dish集合BeanUtils.copyProperties(pageInfo,dishDtoPage,"records");List<Dish> records =pageInfo.getRecords();//把Dish集合的每一个dish都拷贝到新建的dishDto 然后封装数据返回dishDto的集合List<DishDto> list = records.stream().map((item) -> {DishDto dishDto = new DishDto();BeanUtils.copyProperties(item, dishDto);Long categoryId = item.getCategoryId();//根据Id查询category对象 然后获得nameCategory category = categoryService.getById(categoryId);//获取到name并封装进dishDtoString categoryName = category.getName();dishDto.setCategoryName(categoryName);return dishDto;}).toList();//设置封装的Page类的RecordsdishDtoPage.setRecords(list);return new R(1,"查询成功",dishDtoPage);}

修改菜品

DishServiceImpl:

@Override
public void updateWithFlavor(DishDto dishDto) {log.info("dishDto:{}",dishDto);//更新dish表基本信息this.updateById(dishDto);//清理当前菜品对应口味数据---dish_flavor标的delete操作LambdaQueryWrapper<DishFlavor> queryWrapper= new LambdaQueryWrapper<>();queryWrapper.eq(DishFlavor::getDishId,dishDto.getId());dishFlavorService.remove(queryWrapper);//添加当前菜品对应口味数据--- dish_flavor 的insert操作List<DishFlavor> flavors = dishDto.getFlavors();//给集合中的每个菜品口味都附上菜品id值flavors=flavors.stream().map((item)->{item.setDishId(dishDto.getId());return item;}).collect(Collectors.toList());dishFlavorService.saveBatch(flavors);}

DishController:

@PutMapping()
public R update(@RequestBody DishDto dishDto){dishService.updateWithFlavor(dishDto);return new R(1,"新增菜品成功");
}

菜品状态修改以及菜品删除

菜品状态修改

菜品状态,在前端post

传了一个status,跟菜品的当前状态相反

还有一个ids,也就是菜品的id

批量修改跟单个修改发送的请求是一样的,所以我们直接写到同一个方法里

直接写DishController方法:

@PostMapping("/status/{status}")
public R statusChange(@PathVariable int status, @RequestParam List<Long> ids) {log.info("status:{},ids:{}",status,ids);//我们封装一个dish集合用作多条更新的条件List<Dish> dishes =new ArrayList<>();//遍历每个id并携带status封装进dish类然后塞进集合for (Long id : ids) {Dish dish =new Dish();dish.setId(id);dish.setStatus(status);dishes.add(dish);}//直接调用方法dishService.updateBatchById(dishes);return new R(1,"状态修改成功");}

菜品删除

菜品删除前,我们需要把菜品对应的口味删除掉

前端只传过来一个 ids 用的Delete请求

批量删除请求跟单个删除一样,我们也成一个方法

我们在DishService层写一个deleteWithFlavor方法

@Override
public void deleteWithFlavor(List<Long> ids) {//清除当前菜品对应口味数据LambdaQueryWrapper<DishFlavor> queryWrapper =new LambdaQueryWrapper<>();queryWrapper.in(DishFlavor::getDishId,ids);dishFlavorService.remove(queryWrapper);//删除当前菜品数据this.removeByIds(ids);
}

然后再在controller调用就可以了

@DeleteMapping
public R deleteById(@RequestParam List<Long> ids){log.info("ids:{}",ids);dishService.deleteWithFlavor(ids);return new R(1,"删除成功");
}

java 瑞吉外卖day4及补全功能 文件上传下载 菜品分页查询 Dto类 菜品状态修改 菜品停售以及菜品删除相关推荐

  1. SB_5_瑞吉外卖_4_文件上传下载_菜品新增_菜品分页查询_菜品修改

    瑞吉外卖-Day04 课程内容 文件上传下载 菜品新增 菜品分页查询 菜品修改 1. 文件上传下载 1.1 上传介绍 1.1.1 概述 文件上传,也称为upload,是指将本地图片.视频.音频等文件上 ...

  2. 瑞吉外卖 04 CRUD 菜品 + 文件上传下载

    文件上传下载 预准备 前端代码: 会动态生成一个图像元素. 代码实现 文件上传 在resource/backend/page下创建demo文件,将资料/文件上传下载页面中upload.html复制到这 ...

  3. java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息...

    1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...

  4. 文件上传 java web_JavaWeb 文件上传下载

    1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图片或网盘等功能都是利用文件上传下 ...

  5. java实现excel文件上传_java相关:SpringMVC下实现Excel文件上传下载

    java相关:SpringMVC下实现Excel文件上传下载 发布于 2020-6-21| 复制链接 摘记: 在实际应用中,经常会遇到上传Excel或者下载Excel的情况,比如导入数据.下载统计数据 ...

  6. java ftp 下载慢_Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题

    废话不多说了,直接给大家贴代码了,具体代码如下所示: //文件上传 public static boolean uploadToFTP(String url,int port,String usern ...

  7. centos nfs java_CentOS下安装配置NFS并通过Java进行文件上传下载

    1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...

  8. java上传文件到ftp_java实现文件上传下载至ftp服务器

    以前做的一个项目,用到了文件上传下载至ftp服务器,现在对其进行一下复习,比较简单,一下就能看明白. 环境:首先,先安装ftp服务器,我是在win8本地用IIS配置的, 百度一下就可以找到安装文档. ...

  9. java批量上传文件_Spring Boot2(十四):单文件上传/下载,文件批量上传

    文件上传和下载在项目中经常用到,这里主要学习SpringBoot完成单个文件上传/下载,批量文件上传的场景应用.结合mysql数据库.jpa数据层操作.thymeleaf页面模板. 一.准备 添加ma ...

最新文章

  1. secret-galaxy-300 Replace(印象深刻) 寒假逆向生涯(8/100)
  2. JAVA面试必备的知识宝典(一)
  3. 《实战突击.php项目开发案例整合》.(明日科技).[PDF]ckook
  4. 曼哈顿距离和欧拉距离
  5. kaggle使用笔记
  6. Optical-Flow光流halcon算子,持续更新
  7. Vertex and Fragment Shader
  8. 打了断点为直接运行完_BBC主持人多次打断,香港大律师忍不住发飙
  9. asp.net接受表单验证格式后再提交数据_看滴普科技大前端如何玩转el-form-renderer 表单渲染器1.14.0
  10. mysql中为啥只显示一条语句_MySQL 笔记整理(19) --为什么我只查一行的语句,也执行这么慢?...
  11. 4x4矩阵键盘c语言程序,C语言矩阵键盘程序
  12. JS动态添加Html
  13. Nokia于MWC再出手机9 PureView 6颗镜头受到瞩目
  14. 宏碁电脑怎么快速重装Win11系统?
  15. ELK系列之Mac安装kibana报错License information could not be obtained from Elasticsearch due to [invalid_inde
  16. lunix上silk转mp3 和 mp3转silk
  17. android多线程讲解与实例
  18. 进程间通信有哪几种方式?进程间通信的方法详解
  19. 一张学习规划图学透自动化测试
  20. 学嵌入式好还是java好?

热门文章

  1. 如何将ROS1和ROS2安装到同一个ubuntu系统中
  2. JSP_运维_JSP项目部署到服务器(适合0经验新手)
  3. 图片饱和度,色相,亮度调整
  4. mysql trg文件_MySQL - 文件类型及其用途
  5. [Linux 基础] -- V4L2 框架 - control
  6. false-positive rate
  7. 数据流图的画法及其三大原则
  8. Android进度条/等待加载——旋转小圆点效果
  9. 熬过创业初期的艰辛,一个项目让他盈利20余万
  10. 幽默夫妻笑话-弱不禁风的妻子