开通阿里云OSS对象存储
1、进入管理控制台
2、 创建Bucket
3、配置属性(根据个人需求设置)
4、查看个人bucket
5、springboot配置
(1)引入依赖
<!--aliyun oss存储-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.1.0</version>
</dependency>
<!--日期工具类-->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
(2)配置yml文件
#阿里云OSS存储配置
aliyun:
oss:
file:
endpoint: oss-cn-shenzhen.aliyuncs.com
keyid: your AccessKeyID
keysecret: your keySecret
bucketname: your bucketname
url: https://bucketName.endpoint/
(3)编写配置类
package com.siko.education.config;
import lombok.Data;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import java.io.Serializable;
/**
* @author barry
* @create 2022-04-27 22:19
*/
//当项目已启动,spring接口,spring加载之后,执行接口一个方法
@Configuration
public class OSSConfig 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;
@Value("${aliyun.oss.file.url}")
private String url;
//定义公开静态常量
public static String END_POIND;
public static String ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
public static String BUCKET_NAME;
public static String URL;
@Override
public void afterPropertiesSet() throws Exception {
END_POIND = endpoint;
ACCESS_KEY_ID = keyId;
ACCESS_KEY_SECRET = keySecret;
BUCKET_NAME = bucketName;
URL=url;
}
}
(4)编写controller层
package com.siko.education.controller;
import com.siko.education.service.OSSService;
import com.siko.education.util.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
/**
* @author barry
* @create 2022-04-27 22:44
*/
@RestController
@RequestMapping("/edu/oss")
public class OSSController {
@Autowired
private OSSService ossService;
/**
* 上传文件至阿里云 oss
*
* @param file
* @param
* @return
* @throws Exception
*/
@PostMapping(value = "/upload", produces = {MediaType.APPLICATION_JSON_VALUE})
public R uploadOssFile(MultipartFile file){
if(file == null){
return R.error();
}
String url = ossService.uploadFileAvatar(file);
return R.ok().data("url",url);
}
}
(5)service层
package com.siko.education.service;
import com.siko.education.util.R;
import org.springframework.web.multipart.MultipartFile;
/**
* @author barry
* @create 2022-04-27 22:32
*/
public interface OSSService {
/**
* 上传文件至阿里云 oss
*/
String uploadFileAvatar(MultipartFile file);
}
(6)serviceImpl
package com.siko.education.service.impl;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.siko.education.config.OSSConfig;
import com.siko.education.service.OSSService;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.util.UUID;
/**
* @author barry
* @create 2022-04-27 22:33
*/
@Service("ossService")
public class OSSServiceImpl implements OSSService {
@Autowired
private OSSConfig ossConfig;
@Override
public String uploadFileAvatar(MultipartFile file) {
String endpoint = OSSConfig.END_POIND;
String accessKeyId = OSSConfig.ACCESS_KEY_ID;
String accessKeySecret = OSSConfig.ACCESS_KEY_SECRET;
String bucketName = OSSConfig.BUCKET_NAME;
String baseUrl = OSSConfig.URL;
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
// 获取上传文件输入流
InputStream inputStream = file.getInputStream();
//获取文件名称
String fileName = file.getOriginalFilename();
//避免文件上重复名称 增加uuid
String uuid = UUID.randomUUID().toString().replaceAll("-","");
fileName = uuid + fileName;
//对上传的文件加上日期分类
String datePath = new DateTime().toString("yyyy-MM-dd");
fileName = datePath +"/"+ fileName;
/**
* 第一个参数 BucketName名称
* 第二个参数 上传到oss文件的文件名称
* 第三个参数 上传文件输入流
*/
// 创建PutObject请求。
ossClient.putObject(bucketName, fileName, inputStream);
return baseUrl+ fileName;
} catch (Exception ce) {
ce.printStackTrace();
System.out.println("Error Message:" + ce.getMessage());
return null;
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
(7)测试