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

SpringBoot對接AWS?S3實(shí)現(xiàn)上傳和查詢

 更新時(shí)間:2025年02月17日 10:19:25   作者:HBLOG  
AWS?S3是亞馬遜提供的一種對象存儲(chǔ)服務(wù),旨在提供可擴(kuò)展、高可用性和安全的數(shù)據(jù)存儲(chǔ)解決方案,本文我們就來看看SpringBoot如何對接AWS?S3實(shí)現(xiàn)上傳和查詢吧

1.aws S3介紹

AWS S3(Amazon Simple Storage Service)是亞馬遜提供的一種對象存儲(chǔ)服務(wù),旨在提供可擴(kuò)展、高可用性和安全的數(shù)據(jù)存儲(chǔ)解決方案。以下是AWS S3的一些主要特點(diǎn)和功能:

1.1. 對象存儲(chǔ)

  • 對象存儲(chǔ)模型:S3使用對象存儲(chǔ)模型,數(shù)據(jù)以對象的形式存儲(chǔ)在桶(Bucket)中。每個(gè)對象由數(shù)據(jù)、元數(shù)據(jù)和唯一的標(biāo)識(shí)符(鍵)組成。
  • 桶(Bucket):桶是存儲(chǔ)對象的容器。每個(gè)桶都有一個(gè)唯一的名稱,并且可以在全球范圍內(nèi)訪問。

1.2. 高可用性和耐久性

  • 耐久性:S3提供99.999999999%(11個(gè)9)的數(shù)據(jù)耐久性,確保數(shù)據(jù)在多個(gè)設(shè)施中冗余存儲(chǔ)。
  • 高可用性:S3設(shè)計(jì)為具有高可用性,確保用戶可以隨時(shí)訪問存儲(chǔ)的數(shù)據(jù)。

1.3. 可擴(kuò)展性

彈性擴(kuò)展:S3可以自動(dòng)擴(kuò)展以處理任意數(shù)量的數(shù)據(jù)和請求,無需用戶進(jìn)行容量規(guī)劃。

1.4. 安全性

  • 訪問控制:S3提供多種訪問控制機(jī)制,包括桶策略、IAM策略和ACL(訪問控制列表),以確保只有授權(quán)用戶能夠訪問數(shù)據(jù)。
  • 加密:支持在傳輸和靜態(tài)存儲(chǔ)時(shí)對數(shù)據(jù)進(jìn)行加密,提供多種加密選項(xiàng),包括服務(wù)器端加密(SSE)和客戶端加密。

1.5. 數(shù)據(jù)管理和分析

  • 版本控制:S3支持對象版本控制,允許用戶保留和恢復(fù)對象的多個(gè)版本。
  • 生命周期管理:用戶可以設(shè)置生命周期規(guī)則,以自動(dòng)轉(zhuǎn)移或刪除不再需要的數(shù)據(jù)。
  • 事件通知:S3可以配置事件通知,以便在對象創(chuàng)建、刪除等操作時(shí)觸發(fā)Lambda函數(shù)、SNS通知等。

1.6. 集成和兼容性

  • 與其他AWS服務(wù)集成:S3與AWS的其他服務(wù)(如EC2、Lambda、CloudFront等)無縫集成,支持?jǐn)?shù)據(jù)分析、備份、內(nèi)容分發(fā)等多種場景。
  • 兼容性:S3兼容RESTful API,支持多種編程語言和SDK,方便開發(fā)者進(jìn)行集成和使用。

1.7. 使用場景

  • 備份和恢復(fù):用于數(shù)據(jù)備份和恢復(fù)解決方案。
  • 靜態(tài)網(wǎng)站托管:可以托管靜態(tài)網(wǎng)站,支持自定義域名和HTTPS。
  • 大數(shù)據(jù)分析:用于存儲(chǔ)和分析大數(shù)據(jù)集,支持與AWS Glue、Amazon Athena等服務(wù)集成。
  • 媒體存儲(chǔ):用于存儲(chǔ)和分發(fā)音頻、視頻和圖像等媒體文件。

1.8. 定價(jià)

按需計(jì)費(fèi):S3采用按需計(jì)費(fèi)模式,用戶只需為實(shí)際使用的存儲(chǔ)空間和請求付費(fèi)。定價(jià)根據(jù)存儲(chǔ)類型、數(shù)據(jù)傳輸和請求數(shù)量等因素而異。

2.AWS的訪問密鑰(Access Key)和秘密密鑰(Secret Key)

要獲取AWS的訪問密鑰(Access Key)和秘密密鑰(Secret Key),請按照以下步驟操作:

2.1. 登錄到AWS管理控制臺(tái)

訪問 AWS管理控制臺(tái) 并使用你的AWS賬戶登錄。

2.2. 訪問IAM(身份與訪問管理)

  • 在控制臺(tái)主頁,找到并點(diǎn)擊“IAM”服務(wù)。
  • 在左側(cè)菜單中,選擇“用戶”。

2.3. 創(chuàng)建新用戶(如果需要)

如果你還沒有用戶,或者想為特定的應(yīng)用創(chuàng)建一個(gè)新用戶,可以按照以下步驟創(chuàng)建:

  • 點(diǎn)擊“添加用戶”。
  • 輸入用戶名,并選擇“編程訪問”選項(xiàng)。
  • 點(diǎn)擊“下一步:權(quán)限”。

2.4. 設(shè)置權(quán)限

你可以選擇將用戶添加到現(xiàn)有的用戶組,或者直接為用戶附加權(quán)限策略。

如果你只需要S3的訪問權(quán)限,可以選擇“創(chuàng)建策略”,并使用以下JSON示例來創(chuàng)建一個(gè)只允許訪問S3的策略:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:", "Resource": "" } ] }

完成后,點(diǎn)擊“下一步:標(biāo)簽”,然后點(diǎn)擊“下一步:查看”。

確認(rèn)信息無誤后,點(diǎn)擊“創(chuàng)建用戶”。

2.5. 獲取訪問密鑰和秘密密鑰

  • 創(chuàng)建用戶后,你將看到一個(gè)成功頁面,其中包含“訪問密鑰 ID”和“秘密訪問密鑰”。
  • 注意:秘密訪問密鑰只會(huì)在此時(shí)顯示一次,請務(wù)必將其安全保存。如果丟失,你需要重新生成密鑰。

2.6. 配置密鑰

將獲取到的“訪問密鑰 ID”和“秘密訪問密鑰”填入你的application.properties文件中:

cloud.aws.credentials.access-key=YOUR_ACCESS_KEY
cloud.aws.credentials.secret-key=YOUR_SECRET_KEY

2.7. 安全性注意事項(xiàng)

  • 不要將密鑰硬編碼:在生產(chǎn)環(huán)境中,建議使用環(huán)境變量或AWS Secrets Manager來管理密鑰。
  • 最小權(quán)限原則:只授予用戶所需的最小權(quán)限,以降低安全風(fēng)險(xiǎn)。
  • 定期輪換密鑰:定期更換訪問密鑰以增強(qiáng)安全性。

通過以上步驟,你就可以獲取AWS的訪問密鑰和秘密密鑰,并在Spring Boot應(yīng)用中進(jìn)行配置。

3.代碼工程

要在Spring Boot應(yīng)用中對接AWS S3服務(wù),實(shí)現(xiàn)文件的上傳和查詢,你可以按照以下步驟進(jìn)行:

3.1. 添加依賴

在你的pom.xml中添加AWS SDK的依賴:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springboot-demo</artifactId>
        <groupId>com.et</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>aws-s3</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-s3</artifactId>
            <version>1.12.300</version> <!-- 請根據(jù)需要選擇合適的版本 -->
        </dependency>
    </dependencies>
</project>

3.2. 配置AWS憑證

你可以通過環(huán)境變量、系統(tǒng)屬性或配置文件來配置AWS憑證。以下是使用application.properties的示例:

cloud.aws.credentials.access-key=xxxx
cloud.aws.credentials.secret-key=xxxx
cloud.aws.region.static=xxx
cloud.aws.s3.bucket=xxx
proxy.host=127.0.0.1
proxy.port=1080

3.3. 創(chuàng)建S3配置類

創(chuàng)建一個(gè)配置類來初始化S3客戶端:

package com.et.aws.config;

import com.amazonaws.ClientConfiguration;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.net.InetSocketAddress;
import java.net.Proxy;

@Configuration
public class S3Config {

    @Value("${cloud.aws.credentials.access-key}")
    private String accessKey;

    @Value("${cloud.aws.credentials.secret-key}")
    private String secretKey;

    @Value("${cloud.aws.region.static}")
    private String region;

    @Value("${proxy.host:}") // 代理主機(jī)
    private String proxyHost;

    @Value("${proxy.port:}") // 代理端口
    private int proxyPort;

    @Bean
    public AmazonS3 amazonS3() {
        BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);

        AmazonS3ClientBuilder builder = AmazonS3ClientBuilder.standard()
                .withRegion(region)
                .withCredentials(new AWSStaticCredentialsProvider(awsCredentials));

        // 如果代理主機(jī)和端口不為空,則配置代理
        if (!proxyHost.isEmpty() && proxyPort > 0) {
            Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
            builder.withClientConfiguration(new ClientConfiguration().withProxyHost(proxyHost).withProxyPort(proxyPort));
        }

        return builder.build();
    }
}

3.4. 實(shí)現(xiàn)文件上傳和查詢功能

創(chuàng)建一個(gè)服務(wù)類來處理文件的上傳和查詢:

package com.et.aws.service;

import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

@Service
public class S3Service {

    @Autowired
    private AmazonS3 amazonS3;

    @Value("${cloud.aws.s3.bucket}")
    private String bucketName;

    public String uploadFile(MultipartFile file) throws IOException {
        String fileName = file.getOriginalFilename();
        InputStream inputStream = file.getInputStream();
        amazonS3.putObject(bucketName, fileName, inputStream, null);
        return fileName;
    }

    public List<String> listFiles() {
        ObjectListing objectListing = amazonS3.listObjects(bucketName);
        List<String> fileNames = new ArrayList<>();
        for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
            fileNames.add(objectSummary.getKey());
        }
        return fileNames;
    }
}

3.5. 創(chuàng)建控制器

創(chuàng)建一個(gè)控制器來處理HTTP請求:

package com.et.aws.controller;

import com.et.aws.service.S3Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

@RestController
@RequestMapping("/api/s3")
public class S3Controller {

    @Autowired
    private S3Service s3Service;

    @PostMapping("/upload")
    public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
        try {
            String fileName = s3Service.uploadFile(file);
            return ResponseEntity.ok("File uploaded: " + fileName);
        } catch (IOException e) {
            return ResponseEntity.status(500).body("File upload failed: " + e.getMessage());
        }
    }

    @GetMapping("/files")
    public ResponseEntity<List<String>> listFiles() {
        List<String> files = s3Service.listFiles();
        return ResponseEntity.ok(files);
    }
}

以上只是一些關(guān)鍵代碼,所有代碼請參見下面代碼倉庫

代碼倉庫

github.com/Harries/springboot-demo(aws-s3)

4. 測試

啟動(dòng)你的Spring Boot應(yīng)用,并使用Postman或其他工具測試文件上傳和查詢功能。

上傳文件

發(fā)送POST請求到/api/s3/upload,并在請求中附加文件。

查詢文件

發(fā)送GET請求到/api/s3/files,將返回存儲(chǔ)在S3中的文件列表。

注意事項(xiàng)

  • 確保你的AWS IAM用戶具有對S3的訪問權(quán)限。
  • 根據(jù)需要處理異常和錯(cuò)誤情況。
  • 你可以根據(jù)需要擴(kuò)展功能,例如文件刪除、文件下載等。

通過以上步驟,你就可以在Spring Boot應(yīng)用中成功對接AWS S3服務(wù),實(shí)現(xiàn)文件的上傳和查詢。

以上就是SpringBoot對接AWS S3實(shí)現(xiàn)上傳和查詢的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot AWS S3的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Springboot+Shiro+Jwt實(shí)現(xiàn)權(quán)限控制的項(xiàng)目實(shí)踐

    Springboot+Shiro+Jwt實(shí)現(xiàn)權(quán)限控制的項(xiàng)目實(shí)踐

    如今的互聯(lián)網(wǎng)已經(jīng)成為前后端分離的時(shí)代,所以本文在使用SpringBoot整合Shiro框架的時(shí)候會(huì)聯(lián)合JWT一起搭配使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • JAVA中使用JSON進(jìn)行數(shù)據(jù)傳遞示例

    JAVA中使用JSON進(jìn)行數(shù)據(jù)傳遞示例

    本篇文章主要介紹了JAVA中使用JSON進(jìn)行數(shù)據(jù)傳遞示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • idea2023遠(yuǎn)程調(diào)試springboot的過程詳解

    idea2023遠(yuǎn)程調(diào)試springboot的過程詳解

    這篇文章主要介紹了idea2023遠(yuǎn)程調(diào)試,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • SpringBoot @value注解動(dòng)態(tài)刷新問題小結(jié)

    SpringBoot @value注解動(dòng)態(tài)刷新問題小結(jié)

    @Value注解 所對應(yīng)的數(shù)據(jù)源來自項(xiàng)目的 Environment 中,我們可以將數(shù)據(jù)庫或其他文件中的數(shù)據(jù),加載到項(xiàng)目的 Environment 中,然后 @Value注解 就可以動(dòng)態(tài)獲取到配置信息了,這篇文章主要介紹了SpringBoot @value注解動(dòng)態(tài)刷新,需要的朋友可以參考下
    2023-09-09
  • Maven Spring框架依賴包示例詳解

    Maven Spring框架依賴包示例詳解

    這篇文章主要介紹了如何在Maven項(xiàng)目中添加Spring框架的依賴包,包括Spring核心工具包和Spring JDBC,文章還提到在pom.xml文件中添加Spring配置文件頭信息,感興趣的朋友一起看看吧
    2025-03-03
  • 詳解Spring Aop實(shí)例之xml配置

    詳解Spring Aop實(shí)例之xml配置

    本篇文章主要介紹了詳解Spring Aop實(shí)例之xml配置,使用xml可以對aop進(jìn)行集中配置,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 簡單了解Spring Framework5.0新特性

    簡單了解Spring Framework5.0新特性

    這篇文章主要介紹了簡單了解Spring Framework5.0新特性,涉及了核心框架修訂,核心容器更新,使用Kotlin進(jìn)行函數(shù)式編程等幾個(gè)方面的介紹,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java處理字節(jié)類型數(shù)據(jù)的實(shí)現(xiàn)步驟

    Java處理字節(jié)類型數(shù)據(jù)的實(shí)現(xiàn)步驟

    字節(jié)(Byte)是計(jì)算機(jī)信息技術(shù)用于計(jì)量存儲(chǔ)容量的一種基本單位,通常簡寫為B,在ASCII編碼中1Byte可以表示一個(gè)標(biāo)準(zhǔn)的英文字符,包括大寫字母、小寫字母、數(shù)字、標(biāo)點(diǎn)符號和控制字符等,本文給大家介紹了Java如何優(yōu)雅的處理字節(jié)類型數(shù)據(jù),需要的朋友可以參考下
    2024-07-07
  • 淺談mybatis mapper.xml文件中$和#的區(qū)別

    淺談mybatis mapper.xml文件中$和#的區(qū)別

    這篇文章主要介紹了淺談mybatis mapper.xml文件中$和#的區(qū)別,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Java NIO無法綁定指定IP和端口解決方案

    Java NIO無法綁定指定IP和端口解決方案

    這篇文章主要介紹了Java NIO無法綁定指定IP和端口解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評論

浦县| 安龙县| 云林县| 昭通市| 舟曲县| 兴义市| 黑龙江省| 武隆县| 元阳县| 雷山县| 莱芜市| 鹤峰县| 郧西县| 清苑县| 安庆市| 泾川县| 镇沅| 宁陵县| 靖宇县| 周宁县| 白水县| 故城县| 屏南县| 盱眙县| 思茅市| 客服| 桃源县| 惠东县| 重庆市| 白玉县| 乐业县| 深泽县| 汨罗市| 崇州市| 尼勒克县| 武安市| 彭泽县| 高尔夫| 石台县| 武功县| 新和县|