一、在阿里云后台创建
如果你为了其他成员也可以上传文件,可以给其他成员添加其他的子账户的AccessKey
创建完之后添加权限
选中权限
二、引入阿里云oss依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
</dependency>
三、配置文件application.properties中添加oss的配置信息
spring.application.name=service-oss
spring.profiles.active=dev
#配置阿里云的OSS
#不同的服务器地址不一样
aliyun.oss.file.endpoint=oss-cn-shanghai.aliyuncs.com
aliyun.oss.file.keyid=LTAI4Fp8ohevGR444444444
aliyun.oss.file.keysecret=oLrtG0sGAWfivwwwwwww
aliyun.oss.file.bucketname=edu-hjh2
四、创建工具类ConstantPropertiesUtils,在启动的时候将application.properties中的值赋值给对应的属性。
/在项目启动后,ConstantPropertiesUtils交给spring容器管理
//就会执行afterPropertiesSet()方法,在里面可以做一些操作
@Component
public class ConstantPropertiesUtils implements InitializingBean {
//读取配置文件里面数据
@Value("${aliyun.oss.file.endpoint}")
private String endpoint;
@Value("${aliyun.oss.file.keyid}")
private String keyId;
@Value("${aliyun.oss.file.keysecret}")
private String keySecret;
@Value("${aliyun.oss.file.bucketname}")
private String bucketName;
//由于上面的属性是private的,不能被外界使用,可以定义成静态的
public static String END_POINT;
public static String ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
public static String BUCKET_NAME;
@Override
public void afterPropertiesSet() throws Exception {
END_POINT = endpoint;
ACCESS_KEY_ID = keyId;
ACCESS_KEY_SECRET = keySecret;
BUCKET_NAME = bucketName;
}
}
ConstantPropertiesUtils 实现了InitializingBean,在spring启动完成后,将配置文件里面的值赋值给对应的属性,重写的afterPropertiesSet()里面将静态属性值赋值,暴露出去,方便外面的类来调用。
五、编写controller
@RestController
@RequestMapping("/eduoss/fileoss")
@CrossOrigin
public class OssController {
@Autowired
private OssService ossService;
//上传头像到阿里云的oss
@PostMapping
public R uploadOssFile(MultipartFile file) {
String url = ossService.uploadFileAvatar(file);
return R.ok().data("url",url);
}
}
六、编写service
@Service
public class OssServiceImpl implements OssService {
@Override
public String uploadFileAvatar(MultipartFile file) {
// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = ConstantPropertiesUtils.END_POINT;
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建。
String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
try {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 上传文件流。
InputStream inputStream = file.getInputStream();
String filename = file.getOriginalFilename();
String uuid = UUID.randomUUID().toString().replace("-", "");
//把文件按照日期进行分类
String datePath = new DateTime().toString("yyyy/MM/dd");
filename = datePath + "/" + uuid + filename;
//第一个参数,bucket名称
//第二个参数,上传到oss文件路径和文件名称
//第三个参数,上传文件输入流
ossClient.putObject(bucketName, filename, inputStream);
// 关闭OSSClient。
ossClient.shutdown();
//https://edu-hjh2.oss-cn-shanghai.aliyuncs.com/e757c885531b9ccb726e4828dbcb5f15.jpg
return "https://" + bucketName + "." + endpoint + "/" + filename;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
上传图片测试结果: