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