一、開通對象存儲OSS
為了解決海量數據存儲與彈性擴容,項目中我們采用雲存儲的解決方案- 阿里雲OSS。
1、開通“對象存儲OSS”服務
(1)申請阿里雲賬號
(2)實名認證
(3)開通“對象存儲OSS”服務
(4)進入管理控制台
2、創建Bucket
選擇:低頻訪問、公共讀、不開通
3、查看並記錄id和秘鑰


4、OSS幫助文檔


https://help.aliyun.com/document_detail/32008.html?spm=5176.208357.1107607.21.2b6e390feDXmJ6
二、java代碼操作阿里雲oss
1、在service模塊中創建子模塊service_oss
2、在service_oss的pom文件中引入相關oss依賴
<dependencies>
<!-- 阿里雲oss依賴 -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
</dependency>
<!-- 日期工具欄依賴 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
</dependencies>
3、在resources中創建配置文件application.properties
#服務端口 server.port=8002 #服務名 spring.application.name=service-oss #環境設置:dev、test、prod spring.profiles.active=dev #阿里雲 OSS #不同的服務器,地址不同 aliyun.oss.file.endpoint=oss-cn-beijing.aliyuncs.com aliyun.oss.file.keyid=LTAI4GAeLQ4ByaQARKZMnXyj aliyun.oss.file.keysecret=JSh6nc9XFq2LjRNOBBgyKMCPhEE0c7 #bucket可以在控制台創建,也可以使用java代碼創建 aliyun.oss.file.bucketname=edu-0317
4、創建啟動類OssApplication
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class )//參數表示不加載數據庫
@ComponentScan({"com.atguigu"})
public class OssApplication {
public static void main(String[] args) {
SpringApplication.run(OssApplication.class, args);
}
}
注意:由於此模塊不需要操作數據庫,只是做上傳到oss功能,沒有配置數據庫,因此需要在注入@SpringBootApplication中加入對應參數。
5、創建Oss對應的bean、controller和service
在com.atguigu.oss文件夾下創建utils/ConstantPropertiesUtils類
//當項目已啟動,spring接口,spring加載之后,執行接口一個方法 @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; //定義公開靜態常量 public static String END_POINT; public static String ACCESS_KEY_ID; public static String ACCESS_KEY_SECRET; public static String BUCKET_NAME; //spring將上面值都執行之后執行下面方法 @Override public void afterPropertiesSet() throws Exception { END_POINT = endpoint; ACCESS_KEY_ID = keyid; ACCESS_KEY_SECRET = keysecret; BUCKET_NAME = bucketname; } }
在com.atguigu.oss文件夾下創建controller/OssController類
@RestController
@RequestMapping("/eduoss/fileoss")
@CrossOrigin
public class OssController {
@Autowired
private OssService ossService;
//上傳頭像的方法
@PostMapping
public R uploadOssFile(MultipartFile file) {
//獲取上傳文件 MultipartFile
//返回上傳到oss的路徑
String url = ossService.uploadFileAvatar(file);
return R.ok().data("url",url);
}
}
在com.atguigu.oss文件夾下創建service/OssService接口
public interface OssService {
//上傳頭像到oss
String uploadFileAvatar(MultipartFile file);
}
在com.atguigu.oss文件夾下創建service/impl/OssServiceImpl接口實現類
@Service
public class OssServiceImpl implements OssService {
//上傳頭像到oss
@Override
public String uploadFileAvatar(MultipartFile file) {
// yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = ConstantPropertiesUtils.END_POINT;
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();
//1 在文件名稱里面添加隨機唯一的值
String uuid = UUID.randomUUID().toString().replaceAll("-","");
//yuy76sad1.jepy
fileName = uuid + fileName;
//2 把文件按照日期進行分類
//獲取當前日期
// 2021/03/17
String datePath = new DateTime().toString("yyyy/MM/dd");
//拼接
//2021/03/17/1.jepg
fileName = datePath + "/" + fileName;
// 調用oss方法實現上傳
//第一個參數 Bucket名稱
//第二個參數 上傳到oss文件路徑和文件名稱 /aa/bb/01.jepg
//第三個參數 上傳文件輸入流
ossClient.putObject(bucketName, fileName, inputStream);
// 關閉OSSClient。
ossClient.shutdown();
//把上傳之后文件路徑返回
//需要把上傳到阿里雲oss路徑手動拼接出來
// https://edu-0317.oss-cn-beijing.aliyuncs.com/1.jpeg
String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
return url;
}catch(Exception e) {
e.printStackTrace();
return null;
}
}
}
