一個域名權(quán)重3如果做網(wǎng)站的話權(quán)重會降為0嗎百度熱度榜搜索趨勢
本文收錄于【#云計算入門與實踐 - AWS】專欄中,收錄 AWS 入門與實踐相關(guān)博文。
本文同步于個人公眾號:【云計算洞察】
更多關(guān)于云計算技術(shù)內(nèi)容敬請關(guān)注:CSDN【#云計算入門與實踐 - AWS】專欄。
本系列已更新博文:
- [ 云計算 | AWS 實踐 ] Java 應(yīng)用中使用 Amazon S3 進(jìn)行存儲桶和對象操作完全指南
- [ 云計算 | AWS 實踐 ] Java 如何重命名 Amazon S3 中的文件和文件夾
- [ 云計算 | AWS 實踐 ] 使用 Java 列出存儲桶中的所有 AWS S3 對象
- [ 云計算 | AWS 實踐 ] 使用 Java 更新現(xiàn)有 Amazon S3 對象
- [ 云計算 | AWS 實踐 ] 基于 Amazon S3 協(xié)議搭建個人云存儲服務(wù)
- [ 云計算 | AWS 實踐 ] 使用 Java 檢查指定的密鑰是否存在于給定的 Amazon S3 存儲桶中
文章目錄
- 一、前言
- 二、所需 Maven 依賴
- 三、先決必要的幾個條件信息
- 四、創(chuàng)建客戶端連接
- 五、Amazon S3 存儲桶操作
- 5.1. 創(chuàng)建桶
- 5.2. 列出桶
- 5.3. 刪除桶
- 六、Amazon S3 對象操作
- 6.1. 上傳對象
- 6.2. 列出對象
- 6.3. 下載對象
- 6.4. 復(fù)制、重命名和移動對象
- 6.5. 刪除對象
- 6.6. 刪除多個對象
- 七、文末總結(jié)
一、前言
在本文中,我們將探索如何利用 Java 編程與 Amazon S3(即簡單存儲服務(wù))存儲系統(tǒng)進(jìn)行互動。
需要牢記,S3 的結(jié)構(gòu)異常簡單:每個存儲桶能夠容納大量的對象,這些對象可以通過 SOAP 接口或 REST 風(fēng)格的 API 進(jìn)行訪問。
接下來,我們將使用適用于Java的AWS開發(fā)工具包來實現(xiàn)S3存儲桶的創(chuàng)建、列舉以及刪除。同時,我們還將學(xué)會如何上傳、列舉、下載、復(fù)制、移動、重命名以及刪除這些存儲桶內(nèi)的各個對象。
二、所需 Maven 依賴
在開始之前,我們需要在項目中聲明 AWS SDK 依賴項:
<dependency><groupId>software.amazon.awssdk</groupId><artifactId>s3</artifactId><version>2.20.52</version>
</dependency>
要查看最新版本,我們可以檢查 Maven Central,或者其他的國內(nèi) Maven 倉庫。
三、先決必要的幾個條件信息
要使用AWS SDK,我們需要一些東西:
- AWS 帳戶:我們需要一個 Amazon Web Services 帳戶。如果我們沒有,我們可以直接在 AWS 控制臺創(chuàng)建一個帳戶。
- AWS 安全憑證:這些是我們的訪問密鑰,允許我們以編程方式調(diào)用 AWS API 操作。我們可以通過兩種方式獲取這些憑證:使用“安全憑證”頁面的訪問密鑰部分中的 AWS 根賬戶憑證,或者使用
IAM
控制臺中的 IAM 用戶憑證。 - 選擇 AWS 區(qū)域(Region):我們還必須選擇要存儲 Amazon S3 數(shù)據(jù)的 AWS 區(qū)域。請記住,S3 存儲價格因地區(qū)而異。有關(guān)更多詳細(xì)信息,請參閱官方文檔。
四、創(chuàng)建客戶端連接
首先,我們需要創(chuàng)建一個客戶端連接來訪問 Amazon S3 Web 服務(wù)。為此,我們將使用 Amazon S3 接口:
AWSCredentials credentials = new BasicAWSCredentials("<AWS accesskey>", "<AWS secretkey>"
);
然后我們將配置客戶端:
AmazonS3 s3client = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials)).withRegion(Regions.US_EAST_2).build();
五、Amazon S3 存儲桶操作
5.1. 創(chuàng)建桶
需要注意的是,存儲桶命名空間是由系統(tǒng)的所有用戶共享的。因此,我們的存儲桶名稱在 Amazon S3 中的所有現(xiàn)有存儲桶名稱中必須是唯一的(稍后我們將了解如何檢查這一點)。
另外,根據(jù)官方文檔規(guī)定,Bucket 名稱必須符合以下要求:
- 名稱不應(yīng)包含下劃線
- 名稱長度應(yīng)介于 3 到 63 個字符之間
- 名稱不應(yīng)以破折號結(jié)尾
- 名稱不能包含相鄰的句點
- 名稱后面不能包含破折號(例如,“my-.bucket.com”和“my.-bucket”無效)
- 名稱不能包含大寫字符
現(xiàn)在讓我們創(chuàng)建一個存儲桶:
String bucketName = "baeldung-bucket";if(s3client.doesBucketExist(bucketName)) {LOG.info("Bucket name is not available."+ " Try again with a different Bucket name.");return;
}
CreateBucketRequest bucketRequest = CreateBucketRequest.builder().bucket(bucketName).build();s3Client.createBucket(bucketRequest);
在創(chuàng)建存儲桶之前,我們必須使用doesBucketExist()
方法檢查存儲桶名稱是否可用。如果名稱可用,那么我們將構(gòu)建一個CreateBucketRequest
并提供存儲桶名稱。最后一步是將bucketRequest
傳遞給 S3Client 的CreateBucketRequest createBucketRequest
的createBucket
。
5.2. 列出桶
現(xiàn)在我們已經(jīng)創(chuàng)建了一些存儲桶,讓我們使用listBuckets ()
方法打印 S3 環(huán)境中可用的所有存儲桶的列表。此方法將返回一個ListBucketsResponse
, 其中包含有關(guān)存儲桶的信息。
ListBucketsResponse listBucketsResponse = s3Client.listBuckets();// Display the bucket names
List<Bucket> buckets = listBucketsResponse.buckets();
System.out.println("Buckets:");
for (Bucket bucket : buckets) {System.out.println(bucket.name());
}
這將列出 S3 環(huán)境中存在的所有存儲桶:
baeldung-bucket
baeldung-bucket-test2
elasticbeanstalk-us-east-2
5.3. 刪除桶
在刪除存儲桶之前,確保存儲桶是空的非常重要。 否則,將會拋出異常。
首先,我們需要構(gòu)建一個DeleBucketRequest
實例并向其傳遞存儲桶名稱。然后,我們調(diào)用 s3Client 對象上的deleteBucket
方法,并將請求作為參數(shù)傳遞。
另請注意,只有存儲桶的所有者才能刪除它,無論其權(quán)限如何(訪問控制策略):
try {DeleteBucketRequest deleteBucketRequest = DeleteBucketRequest.builder().bucket(bucketName).build();s3Client.deleteBucket(deleteBucketRequest);System.out.println("Successfully deleted bucket : " + bucketName);
} catch (S3Exception e) {System.err.println(e.getMessage());System.exit(1);
}
六、Amazon S3 對象操作
Amazon S3 存儲桶內(nèi)的文件或數(shù)據(jù)集合稱為對象。我們可以對對象執(zhí)行多種操作,例如上傳、列出、下載、復(fù)制、移動、重命名和刪除。
6.1. 上傳對象
上傳對象是一個非常簡單的過程。首先,我們將構(gòu)建一個PutObjectRequest
實例,指定存儲桶名稱和密鑰。然后,我們將該請求和包含數(shù)據(jù)的文件的路徑傳遞給 s3Client 的putObject
方法:
PutObjectRequest request = PutObjectRequest.builder().bucket(bucketName).key(key).build();return s3Client.putObject(request, Path.of(file.toURI()) );
6.2. 列出對象
我們將使用listObjects()
方法列出 S3 存儲桶中的所有可用對象:
ListObjectsV2Request listObjectsV2Request = ListObjectsV2Request.builder().bucket(bucketName).build();
ListObjectsV2Response listObjectsV2Response = s3Client.listObjectsV2(listObjectsV2Request);List<S3Object> contents = listObjectsV2Response.contents();System.out.println("Number of objects in the bucket: " + contents.stream().count());
contents.stream().forEach(System.out::println);
要列出 AWS S3 存儲桶中的對象,我們需要創(chuàng)建一個ListObjectsV2Request
實例并指定存儲桶名稱。然后,我們在 s3Client 對象上調(diào)用 listObjectsV2
方法,并將請求作為參數(shù)傳遞。此方法返回一個ListObjectsV2Response
,其中包含有關(guān)存儲桶中對象的信息。
6.3. 下載對象
要下載對象,我們首先創(chuàng)建一個GetObjectRequest
實例并將存儲桶名稱和密鑰作為輸入?yún)?shù)傳遞給它。然后,我們將其提供給 getObjectAsBytes()
方法并獲取響應(yīng)。一旦我們得到響應(yīng),我們就可以提取字節(jié)數(shù)組。最后一步是處理字節(jié)數(shù)組:
GetObjectRequest objectRequest = GetObjectRequest.builder().bucket(bucketName).key(objectKey).build();ResponseBytes<GetObjectResponse> responseResponseBytes = s3Client.getObjectAsBytes(objectRequest);byte[] data = responseResponseBytes.asByteArray();// Write the data to a local file.
java.io.File myFile = new java.io.File("/Users/user/Desktop/hello.txt" );
OutputStream os = new FileOutputStream(myFile);
os.write(data);
System.out.println("Successfully obtained bytes from an S3 object");
os.close();
6.4. 復(fù)制、重命名和移動對象
我們可以通過調(diào)用 s3client 上的copyObject()
方法來復(fù)制對象,該方法接受CopyObjectRequest
實例。因此,CopyObjectRequest
接受四個參數(shù):
- 源存儲桶名稱
- 源存儲桶中的對象鍵
- 目標(biāo)存儲桶名稱(可以與源存儲桶名稱相同)
- 目標(biāo)存儲桶中的對象鍵
CopyObjectRequest copyObjectRequest = CopyObjectRequest.builder().sourceBucket(sourceBucketName).sourceKey(sourceKey).destinationBucket(destinationBucketName).destinationKey(destinationKey).build();return s3Client.copyObject(copyObjectRequest);
注意:我們可以結(jié)合使用copyObject()
方法和deleteObject()
來執(zhí)行移動和重命名任務(wù)。這將涉及首先復(fù)制對象,然后將其從舊位置刪除。
6.5. 刪除對象
要刪除對象,我們將在s3client上調(diào)用deleteObject()
方法并傳遞DeleteObjectRequest
實例。為了創(chuàng)建DeleteObjectRequest
實例,我們需要傳遞要刪除的對象的鍵和存儲桶名稱:
DeleteObjectRequest deleteObjectRequest = DeleteObjectRequest.builder().bucket(bucketName).key(objectKey).build();s3Client.deleteObject(deleteObjectRequest);
6.6. 刪除多個對象
要一次刪除多個對象,我們首先創(chuàng)建DeleteObjectsRequest
對象并傳遞存儲桶。然后我們將傳遞一個包含所有要刪除的對象鍵的 ArrayList。
一旦我們有了這個DeleteObjectsRequest
對象,我們就可以將它作為參數(shù)傳遞給我們的 s3client 的deleteObjects()
方法。如果成功,它將刪除我們提供的所有對象:
ArrayList<ObjectIdentifier> toDelete = new ArrayList<>();
for(String objKey : keys) {toDelete.add(ObjectIdentifier.builder().key(objKey).build());
}DeleteObjectsRequest deleteObjectRequest = DeleteObjectsRequest.builder().bucket(bucketName).delete(Delete.builder().objects(toDelete).build()).build();s3Client.deleteObjects(deleteObjectRequest);
七、文末總結(jié)
在本文中,我們重點介紹了在存儲桶級別和對象級別與 Amazon S3 Web 服務(wù)交互的基礎(chǔ)知識。重點在 Java 應(yīng)用中使用 Amazon S3(Simple Storage Service)進(jìn)行存儲桶和對象操作的方法、詳細(xì)說明了如何進(jìn)行存儲桶操作,包括創(chuàng)建桶和列出桶。在對象操作部分,我們涵蓋了上傳、列出和下載對象的過程,還介紹了復(fù)制、重命名、移動對象以及刪除對象的方法。此外,我們還提供了刪除多個對象的操作步驟。通過本文,小伙伴們可以了解如何通過 Java 代碼有效地與 Amazon S3 進(jìn)行交互,實現(xiàn)對存儲桶和對象的各種操作。
[ 本文作者 ] bluetata
[ 原文鏈接 ] https://bluetata.blog.csdn.net/article/details/132531011
[ 最后更新 ] 11/19/2023 23:45
[ 版權(quán)聲明 ] 如果您在非 CSDN 網(wǎng)站內(nèi)看到這一行,
說明網(wǎng)絡(luò)爬蟲可能在本人還沒有完整發(fā)布的時候就抓走了我的文章,
可能導(dǎo)致內(nèi)容不完整,請去上述的原文鏈接查看原文。