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

SpringBoot對(duì)接阿里云OSS的詳細(xì)步驟和流程

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

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

一、準(zhǔn)備工作

??注冊(cè)阿里云賬號(hào)??

  • 訪問(wèn)阿里云官網(wǎng)完成注冊(cè)和實(shí)名認(rèn)證。

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

  • 登錄阿里云控制臺(tái) → 進(jìn)入 OSS 服務(wù) → 開通對(duì)象存儲(chǔ) OSS。

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

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

??獲取 AccessKey??

  • 進(jìn)入「AccessKey 管理」→ 創(chuàng)建 RAM 子用戶(推薦)→ 保存 AccessKey IDAccessKey Secret

二、Spring Boot 項(xiàng)目配置

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)建配置類

通過(guò) @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();
        }
    }
}

三、實(shí)現(xiàn)文件上傳功能

1. 文件上傳服務(wù)類

@Service
@RequiredArgsConstructor
public class OssService {
    private final OssConfig ossConfig;
    private final OssClientFactory ossClientFactory;

    public String uploadFile(MultipartFile file) {
        // 校驗(yàn)文件
        validateFile(file);

        // 生成唯一文件名(避免重復(fù))
        String fileName = UUID.randomUUID().toString() + "_" + file.getOriginalFilename();

        try (InputStream inputStream = file.getInputStream()) {
            // 上傳到 OSS
            ossClientFactory.getOssClient().putObject(
                ossConfig.getBucketName(),
                fileName,
                inputStream
            );
            // 生成訪問(wèn) 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 小時(shí)
        return ossClientFactory.getOssClient().generatePresignedUrl(
            ossConfig.getBucketName(),
            fileName,
            expiration
        ).toString();
    }

    private void validateFile(MultipartFile file) {
        // 校驗(yàn)文件大小
        if (file.getSize() > parseSize(ossConfig.getMaxFileSize())) {
            throw new RuntimeException("文件大小超過(guò)限制");
        }
        // 校驗(yàn)文件類型
        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é)單位
        // 實(shí)現(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);
    }
}

四、測(cè)試與部署

??本地測(cè)試??

  • 使用 Postman 發(fā)送 POST 請(qǐng)求到 /api/oss/upload,選擇文件上傳。
  • 返回的 URL 即為 OSS 中文件的訪問(wèn)地址。

??部署注意事項(xiàng)??

  • ??安全建議??:避免硬編碼 AccessKey,推薦使用 RAM 子用戶和 STS 臨時(shí)憑證。
  • ??性能優(yōu)化??:大文件建議使用分片上傳(MultipartUpload)。
  • ??存儲(chǔ)類型??:根據(jù)訪問(wèn)頻率選擇標(biāo)準(zhǔn)存儲(chǔ)、低頻存儲(chǔ)或歸檔存儲(chǔ)。

五、擴(kuò)展功能

??文件下載??

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);

六、常見(jiàn)問(wèn)題

??AccessKey 權(quán)限不足??

  • 檢查 RAM 子用戶是否已授權(quán) OSS 的 oss:PutObject 等權(quán)限。

??文件上傳失敗??

  • 檢查 Bucket 是否存在、網(wǎng)絡(luò)是否連通、文件大小是否超出限制。

??URL 無(wú)法訪問(wèn)??

  • 確認(rèn) Bucket 的讀寫權(quán)限是否為「私有」時(shí)需使用簽名 URL。

通過(guò)以上步驟,即可實(shí)現(xiàn) Spring Boot 與阿里云 OSS 的完整對(duì)接。如需進(jìn)一步優(yōu)化,可參考阿里云 OSS 官方網(wǎng)頁(yè)。

以上就是SpringBoot對(duì)接阿里云OSS的詳細(xì)步驟和流程的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot對(duì)接阿里云OSS的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

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

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

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

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

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

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

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

    基于Java編寫第一個(gè)區(qū)塊鏈項(xiàng)目

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

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

    這篇文章主要介紹了MyBatis 中 ${}和 #{}的正確使用方法,本文給大家提到了MyBatis 中 ${}和 #{}的區(qū)別,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    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)知識(shí),需要的朋友可以參考下
    2022-07-07
  • MyBatis中SqlSession生命周期的使用

    MyBatis中SqlSession生命周期的使用

    SqlSession是MyBatis的核心接口之一,本文主要介紹了MyBatis中SqlSession生命周期的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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項(xiàng)目application.yml文件數(shù)據(jù)庫(kù)配置密碼加密的方法

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

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

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

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

最新評(píng)論

西昌市| 衡水市| 三穗县| 额敏县| 伊春市| 中超| 明水县| 翁源县| 蛟河市| 鄱阳县| 高唐县| 西安市| 姚安县| 仙游县| 迁西县| 石泉县| 姚安县| 彰化市| 罗源县| 名山县| 巴马| 任丘市| 长乐市| 邯郸市| 金阳县| 建平县| 明溪县| 苏尼特左旗| 如东县| 阜新| 南川市| 黎川县| 黔江区| 平遥县| 延川县| 如东县| 高台县| 大洼县| 德清县| 渑池县| 嘉祥县|