CYueblog

导航

day04

文件上传下载

在本代上传一张图片保存到对应文件夹 

1.创建对应的文件夹 在yml里 创建:

reggie:
  path: D:\img\

2.创建一个新的类 注释都不能忘

@RestController
@RequestMapping("/common")

3采用引用的方式 引用你在yml文件里文件地址

@Value("${reggie.path}")
    private String basePath;

注意这个value 的引用地址 不能用lombok里的

4.编写文件并且用uuid重命名

        String originalFilename = file.getOriginalFilename();
        String suffix=originalFilename.substring(originalFilename.lastIndexOf("."));
       
        String FileName= UUID.randomUUID().toString()+suffix;

5.创建文件夹 并且传输文件

  String FileName= UUID.randomUUID().toString()+suffix;
        File dir = new File(basePath);
        if(!dir.exists()){
            dir.mkdir();
        }
        file.transferTo(new File(basePath+FileName));

transfer一定要传一个新的文件 newfile 而且 用basepath 做文件名路径

还要再过滤器放行页面

新增菜品

查询分类数据

1.明白过程 过程就是前台问你查询type=1 的菜品分类 然后放到对应的文本框中 你要做的就是 擦汗寻返回的type 放进去

2,编写对应的实体类mapper 这个很简单不贴了

3.根据前台代码

 

 可以看出请求在那个层里 什么请求方式

4 编写代码查询返回

@GetMapping("/list")
    public R<List<Category>> list(Category category){1.返回的其实是type、
        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 R.success(list);

    }

在这里要注意 1.querywrapper.eq 第二个参数其实是为了解决硬编码 就是找到对应的名字在数据库里的名字 第二个是具体值

在浏览器上显示数据 要有一个download的方法

1.在上传图像时 返回图像名:

 file.transferTo(new File(basePath+FileName));
        return R.success(FileName);

2.下载图像上传

    @GetMapping("/download")
    public void download(String name, HttpServletResponse response){

        try {
            //输入流,通过输入流读取文件内容
            FileInputStream fileInputStream = new FileInputStream(new File(basePath + name));

            //输出流,通过输出流将文件写回浏览器,在浏览器展示图片
            ServletOutputStream outputStream = response.getOutputStream();

            //代表图片文件
            response.setContentType("image/jpeg");

            int len = 0;
            byte[] bytes = new byte[1024];
            while ((len = fileInputStream.read(bytes)) != -1){
                //向response缓冲区中写入字节,再由Tomcat服务器将字节内容组成Http响应返回给浏览器。
                outputStream.write(bytes,0,len);
                //所储存的数据全部清空
                outputStream.flush();
            }

            //关闭流
            fileInputStream.close();
            outputStream.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 

接收页面提交的数据

在前端操作数据并且返回到页面上 有几个注意

1.返回的有口味等等 我们的dish不满足 所以我们新建了一个dto 继承dish 让他保证全都写入

 

public class DishDto extends Dish {
    private List<DishFlavor> flavors = new ArrayList<>();

    private String categoryName;

    private Integer copies;
}

2.在service重写方法.先保存正常数据到dish 然后找到id 插入数据到dishflaver

    @Override
    public void saveWithFlavor(DishDto dishDto){
        super.save(dishDto);//调用自己
        List<DishFlavor> flavors = dishDto.getFlavors();
        Long dishId = dishDto.getId();
        flavors = flavors.stream().map((item) -> {
            item.setDishId(dishId);
            return item;
        }).collect(Collectors.toList());
        dishFlavorService.saveBatch(flavors);

    }

1.调用自己的时候用super 

菜品信息分页查询

1.简单分页

 Page<Dish> pageInfo=new Page<Dish>(page,pageSize);
        LambdaQueryWrapper<Dish> queryWrapper=new LambdaQueryWrapper<>();
        queryWrapper.like(name!=null,Dish::getName,name);
        queryWrapper.orderByDesc(Dish::getUpdateTime);
        dishService.page(pageInfo,queryWrapper);

分页一定要返回 R<Page>

2.这样分页只能分页显示不出菜品名字 因为过去的是id 而不是名字 但是dto里恰好有一个 name可以用它 但是问题来了 怎么把原来的page分给新的page 有一个api叫beanutils 但是这里的records是原来的列表 要先移除 改正在加入 加入就是放几

 BeanUtils.copyProperties(pageInfo,dishDtoPage,"record");
        List<Dish> records = pageInfo.getRecords();
        List<DishDto> list = records.stream().map((item) -> {
            DishDto dishDto = new DishDto();
            BeanUtils.copyProperties(item, dishDto);
            Long categoryId = item.getCategoryId();
            Category byId = categoryService.getById(categoryId);
            String name1 = byId.getName();
            dishDto.setCategoryName(name1);
            return dishDto;

        }).collect(Collectors.toList());
        dishDtoPage.setRecords(list);

        return R.success(dishDtoPage);

-修改菜品 先来根据id搜索

查询到dish 然后拷贝到 地上dto 根据idchaxunflavor 最后加入

    @Override
    public DishDto getByIdWithFlavor(Long id) {
        Dish dish = super.getById(id);
        DishDto dishDto=new DishDto();
        BeanUtils.copyProperties(dish,dishDto);
        LambdaQueryWrapper<DishFlavor> queryWrapper=new LambdaQueryWrapper<>();
        queryWrapper.eq(DishFlavor::getId,id);
        List<DishFlavor> list = dishFlavorService.list(queryWrapper);
        dishDto.setFlavors(list);
        return dishDto;
    }

 

_修改菜品信息和口味信息

在新建updatewithflave函数 直接updatedish 但是dishflavor 要删除后来加入 因为直接update里面加入了不属于他自己的id

 @Override
    public void updateWithFlavor(DishDto dishDto) {
        super.updateById(dishDto);
        LambdaQueryWrapper<DishFlavor> queryWrapper=new LambdaQueryWrapper<>();
        queryWrapper.eq(DishFlavor::getId,dishDto.getCategoryId());
        dishFlavorService.remove(queryWrapper);
        List<DishFlavor> flavors = dishDto.getFlavors();
        flavors=flavors.stream().map((item)->
        {
            item.setDishId(dishDto.getId());
            return item;
        }).collect(Collectors.toList());
        dishFlavorService.saveBatch(flavors);
    }

 

 

 

posted on 2022-05-09 11:55  唱月CY  阅读(67)  评论(0编辑  收藏  举报