SpringBoot集成OSS实现文件上传
1. 功能和Api 接口
2. Spring Cloud OSS 接入准备
2.1 添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alicloud-oss</artifactId>
</dependency>
2.2 申请账号
登录阿里云官网:
搜索RAM->进入RAM 访问控制。
创建用户:
授予权限:
记录你的****AccessKey ID和AccessKey Secret信息:
AccessKey ID | LTAI5tC6vYWV9d3tFkCNLKDs |
---|---|
AccessKey Secret | PVkpcDGzRqe6q0k6cNlKNWCMbenzfo |
2.3 开启OSS 对象存储
进入OSS控制中心:
创建Bucket:
信息确认无误后,点击确定:
记录地域地址:
oss-cn-beijing.aliyuncs.com
oss-cn-beijing-internal.aliyuncs.com
oss-cn-beijing-internal.aliyuncs.com
2.4 添加配置文件
打开Nacos,修改配置文件:
3. 文件上传接口开发
3.1 新建FileController
/**
* 文件上传
*/
@RestController
@Api(tags = "文件上传")
public class FileController {
@Autowired
private OSS ossClient ;
@Value("${oss.bucket.name:exchange-imgs}")
private String bucketName ;
@Value("${spring.cloud.alicloud.oss.endpoint}")
private String endPoint ;
@ApiOperation(value = "文件上传")
@PostMapping("/image/AliYunImgUpload")
@ApiImplicitParams({
@ApiImplicitParam(name = "file" ,value = "你要上传的文件")
})
public R<String> fileUpload(@RequestParam("file") MultipartFile file) throws IOException {
/**
* 3 个参数:
* 1 bucketName
* 2 FileName
* 3 文件的路径
*/
String fileName = DateUtil.today().replaceAll("-","/")+"/"+file.getOriginalFilename() ;
ossClient.putObject(bucketName, fileName, file.getInputStream()); // 文件上传
// 上传成功后,路径为https://exchange-imgs.oss-cn-beijing.aliyuncs.com/2020/10/10/1588586643_meitu_1.jpg
return R.ok("https://" + bucketName+ "."+ endPoint +"/"+ fileName) ;
}
}
3.2 MultipartFile 序列化问题
MultipartFile 使用fastjson 序列化会报错,因此我们需要忽略掉它:
修改WebLogAspect(是一个切面, 所有的controller运行完都会运行这个切面)里面的代码: