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