SpringBoot對接阿里云OSS的詳細步驟和流程
以下是 Spring Boot 對接阿里云 OSS 的詳細步驟和流程,結(jié)合官方網(wǎng)頁和最佳實踐整理而成:
一、準(zhǔn)備工作
??注冊阿里云賬號??
- 訪問阿里云官網(wǎng)完成注冊和實名認證。
??開通 OSS 服務(wù)??
- 登錄阿里云控制臺 → 進入 OSS 服務(wù) → 開通對象存儲 OSS。
??創(chuàng)建 Bucket??
- 進入 OSS 控制臺 → 點擊「創(chuàng)建 Bucket」→ 填寫名稱(如
my-bucket)、地域(如華北2北京)→ 存儲類型選擇「標(biāo)準(zhǔn)存儲」→ 權(quán)限選擇「私有」。
??獲取 AccessKey??
- 進入「AccessKey 管理」→ 創(chuàng)建 RAM 子用戶(推薦)→ 保存
AccessKey ID和AccessKey Secret。
二、Spring Boot 項目配置
1. 添加依賴
在 pom.xml 中添加 OSS SDK 和 Web 依賴:
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.17.0</version> <!-- 使用最新穩(wěn)定版本 -->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
??注意??:若使用 Java 11+,需添加 JAXB 依賴:
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>3.0.2</version>
</dependency>
2. 配置 OSS 參數(shù)
在 application.yml 中配置:
aliyun:
oss:
endpoint: oss-cn-beijing.aliyuncs.com # Bucket 所在地域的 Endpoint
access-key-id: your-access-key-id
access-key-secret: your-access-key-secret
bucket-name: your-bucket-name
max-file-size: 10MB # 最大文件限制(可選)
allowed-extensions: jpg,jpeg,png,pdf # 允許的文件類型(可選)
3. 創(chuàng)建配置類
通過 @ConfigurationProperties 讀取配置并初始化 OSSClient:
@Configuration
@ConfigurationProperties(prefix = "aliyun.oss")
@Data
public class OssConfig {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
}
@Component
public class OssClientFactory {
@Autowired
private OssConfig ossConfig;
private OSS ossClient;
@PostConstruct
public void init() {
ossClient = new OSSClientBuilder().build(
ossConfig.getEndpoint(),
ossConfig.getAccessKeyId(),
ossConfig.getAccessKeySecret()
);
}
@PreDestroy
public void shutdown() {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
三、實現(xiàn)文件上傳功能
1. 文件上傳服務(wù)類
@Service
@RequiredArgsConstructor
public class OssService {
private final OssConfig ossConfig;
private final OssClientFactory ossClientFactory;
public String uploadFile(MultipartFile file) {
// 校驗文件
validateFile(file);
// 生成唯一文件名(避免重復(fù))
String fileName = UUID.randomUUID().toString() + "_" + file.getOriginalFilename();
try (InputStream inputStream = file.getInputStream()) {
// 上傳到 OSS
ossClientFactory.getOssClient().putObject(
ossConfig.getBucketName(),
fileName,
inputStream
);
// 生成訪問 URL
return generateAccessUrl(fileName);
} catch (IOException e) {
throw new RuntimeException("文件上傳失敗", e);
}
}
private String generateAccessUrl(String fileName) {
Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000); // URL 有效期 1 小時
return ossClientFactory.getOssClient().generatePresignedUrl(
ossConfig.getBucketName(),
fileName,
expiration
).toString();
}
private void validateFile(MultipartFile file) {
// 校驗文件大小
if (file.getSize() > parseSize(ossConfig.getMaxFileSize())) {
throw new RuntimeException("文件大小超過限制");
}
// 校驗文件類型
String extension = FilenameUtils.getExtension(file.getOriginalFilename()).toLowerCase();
if (!Arrays.asList(ossConfig.getAllowedExtensions().split(",")).contains(extension)) {
throw new RuntimeException("不支持的文件類型");
}
}
private long parseSize(String size) {
// 解析如 "10MB" 為字節(jié)單位
// 實現(xiàn)略...
}
}
2. 控制器層
@RestController
@RequestMapping("/api/oss")
@RequiredArgsConstructor
public class OssController {
private final OssService ossService;
@PostMapping("/upload")
public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
String url = ossService.uploadFile(file);
return ResponseEntity.ok(url);
}
}
四、測試與部署
??本地測試??
- 使用 Postman 發(fā)送 POST 請求到
/api/oss/upload,選擇文件上傳。 - 返回的 URL 即為 OSS 中文件的訪問地址。
??部署注意事項??
- ??安全建議??:避免硬編碼 AccessKey,推薦使用 RAM 子用戶和 STS 臨時憑證。
- ??性能優(yōu)化??:大文件建議使用分片上傳(
MultipartUpload)。 - ??存儲類型??:根據(jù)訪問頻率選擇標(biāo)準(zhǔn)存儲、低頻存儲或歸檔存儲。
五、擴展功能
??文件下載??
public void downloadFile(String fileName, String localPath) {
ossClientFactory.getOssClient().getObject(
new GetObjectRequest(ossConfig.getBucketName(), fileName),
new File(localPath)
);
}
??文件刪除??
public void deleteFile(String fileName) {
ossClientFactory.getOssClient().deleteObject(
ossConfig.getBucketName(),
fileName
);
}
??圖片處理??
// 添加水印
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, fileName);
request.addResponseHeader("x-oss-process", "image/watermark,image_aHR0cDovL3Npb2FsQ0hJTmV3UzIwMjMxMDA1,size_20,text_QDUxQ1RPQ0hJTmV3UzIwMjMxMDA1001");
URL url = ossClient.generatePresignedUrl(request);
六、常見問題
??AccessKey 權(quán)限不足??
- 檢查 RAM 子用戶是否已授權(quán) OSS 的
oss:PutObject等權(quán)限。
??文件上傳失敗??
- 檢查 Bucket 是否存在、網(wǎng)絡(luò)是否連通、文件大小是否超出限制。
??URL 無法訪問??
- 確認 Bucket 的讀寫權(quán)限是否為「私有」時需使用簽名 URL。
通過以上步驟,即可實現(xiàn) Spring Boot 與阿里云 OSS 的完整對接。如需進一步優(yōu)化,可參考阿里云 OSS 官方網(wǎng)頁。
以上就是SpringBoot對接阿里云OSS的詳細步驟和流程的詳細內(nèi)容,更多關(guān)于SpringBoot對接阿里云OSS的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
自主配置數(shù)據(jù)源,mybatis/plus不打印sql日志問題
這篇文章主要介紹了自主配置數(shù)據(jù)源,mybatis/plus不打印sql日志問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
Spring根據(jù)XML配置文件 p名稱空間注入屬性的實例
下面小編就為大家分享一篇Spring根據(jù)XML配置文件 p名稱空間注入屬性的實例,具有很好的參考價值。希望對大家有所幫助2017-11-11
SpringBoot中二級緩存實現(xiàn)方案總結(jié)
隨著業(yè)務(wù)的發(fā)展,單一的緩存方案往往無法同時兼顧性能、可靠性和一致性等多方面需求,此時,二級緩存架構(gòu)應(yīng)運而生,本文將介紹在Spring Boot中實現(xiàn)二級緩存的三種方案,大家可以根據(jù)需要進行選擇2025-06-06
Spring動態(tài)監(jiān)聽Nacos配置中心key值變更的實現(xiàn)方法
Nacos本身提供支持監(jiān)聽配置變更的操作,但在使用起來,個人感覺不是很友好,無法精確到某個key的變更監(jiān)聽,所以本文小編給大家介紹了Spring動態(tài)監(jiān)聽Nacos配置中心key值變更的實現(xiàn)方法,需要的朋友可以參考下2024-08-08
Java overload和override的區(qū)別分析
方法的重寫(Overriding)和重載(Overloading)是Java多態(tài)性的不同表現(xiàn),想要了解更多請參考本文2012-11-11
Spring boot按日切分spring boot的nohup.out日志文件的方法
過大的日志文件維護起來存在諸多問題,所以最好是能夠按日或按大小切分日志文件,下面小編給大家?guī)砹薙pring boot按日切分spring boot的nohup.out日志文件的方法,一起看看吧2018-08-08

