苍穹外卖-新增菜品(菜品图片-文件上传)(三)

关于新增菜品

需求分析和设计
业务规则:
-菜品名称必须是唯一的
-菜品必须属于某个分类下,不能单独存在新增菜品时可以根据情况选择菜品的口味
-每个菜品必须对应一张图片

接口设计: 3个接口
-根据类型查询分类(已完成)
-文件上传
-新增菜品

首先菜品分类是一个下拉框,获取的数据就需要调用分类的某个接口获取数据
图片上传也是个交互的接口
保存按钮,需要把表单里的数据提交到服务端,又是一个接口
在controller.admin下创建CommonController存放文件上传
浏览器文件上传-后端服务器-阿里云服务器
在阿里云申请的bucket就是一个空间 创建一个配置属性类,在写阿里云oss配置属性有提示 创建在common的properties中
类名为AliOss注解叫@Configuration(prefix = "sky.alioss")标记为配置属性类
配置类代码,这里引申springboot框架自动将属性的驼峰命名转换成配置中的-来划分
yml文件特点习惯用-分隔单词 在yml中可以不实际写值,而是引用dev的yml(开发环境中的yml)
甚至是prod的yml也就是生产的配置文件 直接修改yml中spring.profiles.active为prod多环境直接把配置文件切换了 目前是关联dev所以具体的配置数据都在dev中

@Component
@ConfigurationProperties(prefix = "sky.alioss")
@Data
public class AliOssProperties {
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
}

application-dev.yml

sky:
  alioss:
    endpoint:在bucket概览最下边对应外网第一个
    access-key-id:
    access-key-secret:
    bucket-name:存储空间名

application.yml

sky:
  alioss:
    endpoint:${sky.alioss.endpoint}
同上不多说了

utils包下的aliossutil存储文件上传的方法,四个属性没有赋值,通过配置类的方式给属性初始化出来
值是从配置文件读过来的,写一个配置文件在config包中,取名OssConfiguration
取名aliossutil,这里有多个模块,properties中存储aliossproperties只有属性
utils中存储Aliossutils里upload文件上传方法
config中存储ossconfiguration用oss属性的赋值打包返回给aliossutil
CommonController代码中的接口实现文件上传upload



@RestController
@RequestMapping("/admin/common")
@Api(tags = "通用接口")
@Slf4j
public class CommonController {

    @Autowired
    private AliOssUtil aliOssUtil;

    @PostMapping("/upload")
    @ApiOperation("文件上传")
    public Result<String>  upload(MultipartFile file){
        log.info("文件上传{}",file);
        try {
            //原始文件名
            String originalFilename = file.getOriginalFilename();
            //截取原始文件名后缀
            String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
            //构造新文件名称
            String objectName =UUID.randomUUID().toString() + extension;
            //文件的请求路径
            String filePath = aliOssUtil.upload(file.getBytes(), objectName);
            return Result.success(filePath);
        } catch (IOException e) {
            log.error("文件上传失败{}",e);
        }
        return null;
    }

}

posted @ 2024-02-23 17:37  launch  阅读(555)  评论(0)    收藏  举报