最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot對接阿里云OSS的詳細步驟和流程

 更新時間:2025年08月04日 09:42:39   作者:奇妙智能  
阿里云對象存儲服務(wù)(Object Storage Service,簡稱OSS)是一種海量、安全、低成本、高可靠的云存儲服務(wù),它適合存儲任意類型的文件,適用于海量數(shù)據(jù)存儲、圖片/視頻存儲、靜態(tài)網(wǎng)站托管等場景,本文給大家介紹了SpringBoot對接阿里云OSS的詳細步驟和流程

以下是 Spring Boot 對接阿里云 OSS 的詳細步驟和流程,結(jié)合官方網(wǎng)頁和最佳實踐整理而成:

一、準備工作

??注冊阿里云賬號??

  • 訪問阿里云官網(wǎng)完成注冊和實名認證。

??開通 OSS 服務(wù)??

  • 登錄阿里云控制臺 → 進入 OSS 服務(wù) → 開通對象存儲 OSS。

??創(chuàng)建 Bucket??

  • 進入 OSS 控制臺 → 點擊「創(chuàng)建 Bucket」→ 填寫名稱(如 my-bucket)、地域(如華北2北京)→ 存儲類型選擇「標準存儲」→ 權(quán)限選擇「私有」。

??獲取 AccessKey??

  • 進入「AccessKey 管理」→ 創(chuàng)建 RAM 子用戶(推薦)→ 保存 AccessKey IDAccessKey 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ù)訪問頻率選擇標準存儲、低頻存儲或歸檔存儲。

五、擴展功能

??文件下載??

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)文章

  • 基于java實現(xiàn)簡單的圖片類別識別

    基于java實現(xiàn)簡單的圖片類別識別

    這篇文章主要為大家詳細介紹了如何基于java實現(xiàn)簡單的圖片類別識別功能,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • 解決Java中由于數(shù)據(jù)太大自動轉(zhuǎn)換成科學(xué)計數(shù)法的問題

    解決Java中由于數(shù)據(jù)太大自動轉(zhuǎn)換成科學(xué)計數(shù)法的問題

    今天小編就為大家分享一篇解決Java中由于數(shù)據(jù)太大自動轉(zhuǎn)換成科學(xué)計數(shù)法的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 解決IDEA開發(fā)工具右側(cè)沒有Maven工具欄的問題

    解決IDEA開發(fā)工具右側(cè)沒有Maven工具欄的問題

    這篇文章主要給大家解決了IDEA開發(fā)工具右側(cè)沒有Maven工具欄的問題,文中有詳細的解決步驟,如果有遇到一樣問題的小伙伴,可以參考閱讀本文
    2023-09-09
  • 基于Java編寫第一個區(qū)塊鏈項目

    基于Java編寫第一個區(qū)塊鏈項目

    區(qū)塊鏈是分布式數(shù)據(jù)存儲、點對點傳輸、共識機制、加密算法等計算機技術(shù)的新型應(yīng)用模式,下面這篇文章主要給大家介紹了基于Java實現(xiàn)區(qū)塊鏈的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • MyBatis 中 ${}和 #{}的正確使用方法(千萬不要亂用)

    MyBatis 中 ${}和 #{}的正確使用方法(千萬不要亂用)

    這篇文章主要介紹了MyBatis 中 ${}和 #{}的正確使用方法,本文給大家提到了MyBatis 中 ${}和 #{}的區(qū)別,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 詳解OpenFeign服務(wù)調(diào)用(微服務(wù))

    詳解OpenFeign服務(wù)調(diào)用(微服務(wù))

    OpenFeign是Spring Cloud在Feign的基礎(chǔ)上支持了SpringMVC的注解,如@RequesMapping等等,這篇文章主要介紹了OpenFeign服務(wù)調(diào)用的相關(guān)知識,需要的朋友可以參考下
    2022-07-07
  • MyBatis中SqlSession生命周期的使用

    MyBatis中SqlSession生命周期的使用

    SqlSession是MyBatis的核心接口之一,本文主要介紹了MyBatis中SqlSession生命周期的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • 詳解Java編程中super關(guān)鍵字的用法

    詳解Java編程中super關(guān)鍵字的用法

    這篇文章主要介紹了Java編程中this與super關(guān)鍵字的用法,包括從內(nèi)存結(jié)構(gòu)方面分析super的作用域,需要的朋友可以參考下
    2015-10-10
  • SpringBoot項目application.yml文件數(shù)據(jù)庫配置密碼加密的方法

    SpringBoot項目application.yml文件數(shù)據(jù)庫配置密碼加密的方法

    這篇文章主要介紹了SpringBoot項目application.yml文件數(shù)據(jù)庫配置密碼加密的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 淺談System.getenv()和System.getProperty()的區(qū)別

    淺談System.getenv()和System.getProperty()的區(qū)別

    這篇文章主要介紹了System.getenv()和System.getProperty()的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評論

新密市| 泰兴市| 巩留县| 长岛县| 札达县| 聊城市| 肥城市| 文成县| 湘潭县| 仁布县| 吴川市| 增城市| 怀宁县| 南江县| 通渭县| 姚安县| 定日县| 清河县| 长顺县| 庆安县| 汉中市| 青浦区| 汨罗市| 沙河市| 汉川市| 新建县| 云南省| 卓尼县| 正镶白旗| 修水县| 临城县| 瑞安市| 平江县| 太康县| 马尔康县| 潞城市| 琼中| 高淳县| 黎城县| 丹东市| 曲沃县|