文章目录
前言
在实习过程中,遇到了这样的需求,为了方便以后的重复使用便记录了下来。
前端接口要求:
开发流程
一、添加依赖
<!--阿里云对象存储-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alicloud-oss</artifactId>
</dependency>
二、申请账号
登录阿里云官网,进入控制台,搜索RAM,点击访问控制:
创建用户:
手机验证码验证通过,然后授予权限:
授权成功后点击完成
记录你的 AccessKey ID和AccessKey Secret信息。
三、开启OSS 对象存储
进入OSS控制中心(是的,这个需要钱):
创建Bucket:
信息确认无误后,点击确定。
记录地域地址:
到此注册的操作就完成了,下面看看代码怎么编写吧。
四、添加配置文件
我的配置文件是通过拉取Nacos的配置进行的,跟一般的使用没啥太大差别。
spring:
cloud:
alicloud:
access-key: AccessKey ID
secret-key: AccessKey Secret
oss:
endpoint: 外网访问的Endpoint(地域节点)
五、文件上传接口开发
1、新建FileController
@RestController
@Api(tags = "文件上传")
public class FileController {
@Autowired
private OSS ossClient;
// Bucket 名称大家可自行查看自己的
@Value("${oss.bucket.name:Bucket 名称}")
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());
return R.ok("https://" + bucketName + "." + endPoint + "/" + fileName);
}
}
注意:如果跟我一样有web的日志记录需要做如下操作,否则会出现报错。
2、MultipartFile 序列化问题
MultipartFile 使用fastjson 序列化会报错,因此我们需要忽略掉它:
修改WebLogAspect里面的代码:
if (parameterNames[i].equals("password") || parameterNames[i].equals("file")) {
methodParametersWithValues.put(parameterNames[i], "受限的支持类型");
}else{
methodParametersWithValues.put(parameterNames[i], args[i]);
}
至此关于SpringCloudAlibaba使用OOS图片上传的功能就完成啦(σ゚∀゚)σ…:*☆哎哟不错哦