為了解決海量資料存儲與彈性擴容,項目中我們采用雲存儲的解決方案- 阿裡雲OSS。
1、開通“對象存儲OSS”服務
(1)申請阿裡雲賬号
(2)實名認證
(3)開通“對象存儲OSS”服務
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iZ4YGM2UDOyEjMhlTZ4ITYlFzMwUGMlhTYyEzNhV2M18CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
或者直接點選這個進入下面頁面,點選開通:https://www.aliyun.com/product/oss
(4)進入管理控制台
點選最右側建立Bucket
填寫Bucket名稱
讀寫權限改為:公共讀
記住下邊藍色圈出來的後邊會用到
确認即可.
二:阿裡雲測試
依次點選進入,點選上傳圖像,
拖拽或者點選選擇圖檔,即可上傳成功
三:擷取java代碼編寫必要的常量值
(1)endpoint:上邊讓儲存記住的内容
(2)bucketName:建立Access時候的名字
(3)accessKeyId
(4)accessKeySecret
擷取步驟
1.點選頭像,下拉框點選accesskeys,
2.彈出的框,點選繼續使用
建立一個AccessKey,按要求填寫驗證碼
最後得到相應的
四:java代碼
依賴導入:
<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>
配置檔案:
#服務端口
server.port=8002
#服務名
spring.application.name=service-oss
#環境設定:dev、test、prod
spring.profiles.active=dev
#阿裡雲 OSS
#不同的伺服器,位址不同
aliyun.oss.file.endpoint=your endpoint
aliyun.oss.file.keyid=your accessKeyId
aliyun.oss.file.keysecret=your accessKeySecret
#bucket可以在控制台建立,也可以使用java代碼建立
aliyun.oss.file.bucketname=guli-file
啟動類
package com.guli.oss;
@SpringBootApplication
@ComponentScan({"com.atguigu"})
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class OssApplication {
public static void main(String[] args) {
SpringApplication.run(OssApplication.class, args);
}
}
從配置檔案讀取常量
建立常量讀取工具類:ConstantPropertiesUtil.java
使用@Value讀取application.properties裡的配置内容
用spring的 InitializingBean 的 afterPropertiesSet 來初始化配置資訊,這個方法将在所有的屬性被初始化後調用。
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;
@Override
public void afterPropertiesSet() throws Exception {
END_POINT=endpoint;
ACCESS_KEY_ID=keyId;
ACCESS_KEY_SECRET=keySecret;
BUCKET_NAME=bucketname;
}
}
2、檔案上傳
建立Service接口:FileService.java
public interface FileService {
String upload(MultipartFile file);
}
實作:FileServiceImpl.java
@Service
public class OssServiceImpl implements OssService {
@Override
public String uploadFileAvatar(MultipartFile file) {
String endpoint= ConstantPropertiesUtils.END_POINT;
String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
String accessKeySecret =ConstantPropertiesUtils.ACCESS_KEY_SECRET;
String bucketName=ConstantPropertiesUtils.BUCKET_NAME;
try {
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
InputStream inputStream = file.getInputStream();
//擷取檔案名稱
String fileName=file.getOriginalFilename();
//在檔案名稱裡邊添加一個随機唯一的值
String uuid=UUID.randomUUID().toString().replaceAll("-","");
fileName=uuid+fileName;
//檔案按日期分類存到oss
//擷取目前的日期
String datePath=new DateTime().toString("yyyy/MMM/dd");
fileName=datePath+"/"+fileName;
ossClient.putObject(bucketName,fileName, inputStream);
ossClient.shutdown();
//傳回路徑
String url="https://"+bucketName+"."+endpoint+"/"+fileName;
// System.out.println(url);
return url;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
}
3、控制層
建立controller:FileUploadController.java
@RestController
@RequestMapping("/eduoss/fileoss")
@CrossOrigin
public class OssController {
@Autowired
private OssService ossService;
@PostMapping
public R uploadOssFile(MultipartFile file){
//傳回上傳到oss的路徑
String url=ossService.uploadFileAvatar(file);
return R.ok().data("url",url);
}
}
代碼就寫完了,可以測試了!