日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

亚马逊s3的使用方法_使用jclouds库在Amazon S3上上传

發(fā)布時(shí)間:2023/12/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 亚马逊s3的使用方法_使用jclouds库在Amazon S3上上传 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

亞馬遜s3的使用方法

在Java世界中,有幾種很好的方法可以將內(nèi)容上傳到S3存儲(chǔ)桶-在本文中,我們將研究jclouds庫(kù)為此提供的功能。 要使用jclouds –特別是本文中討論的API,應(yīng)將此簡(jiǎn)單的Maven依賴項(xiàng)添加到項(xiàng)目的pom中:

<dependency><groupId>org.jclouds</groupId><artifactId>jclouds-allblobstore</artifactId><version>1.5.9</version> </dependency>

1.上載到Amazon S3

為了訪問(wèn)這些API中的任何一個(gè),第一步是創(chuàng)建一個(gè)BlobStoreContext :

BlobStoreContext context =ContextBuilder.newBuilder('aws-s3').credentials(identity, credentials).buildView(BlobStoreContext.class);

這表示常規(guī)鍵值存儲(chǔ)服務(wù)(例如Amazon S3)的切入點(diǎn),但不僅限于此。 對(duì)于僅用于S3的更具體的實(shí)現(xiàn),可以類似地創(chuàng)建上下文:

BlobStoreContext context =ContextBuilder.newBuilder('aws-s3').credentials(identity, credentials).buildView(S3BlobStoreContext.class);

更具體地說(shuō):

BlobStoreContext context =ContextBuilder.newBuilder('aws-s3').credentials(identity, credentials).buildView(AWSS3BlobStoreContext.class);

當(dāng)不再需要經(jīng)過(guò)身份驗(yàn)證的上下文時(shí),需要關(guān)閉它以釋放與其關(guān)聯(lián)的所有資源(線程和連接)。

2. jclouds的四個(gè)S3 API

jclouds庫(kù)提供了四種不同的API來(lái)將內(nèi)容上傳到S3存儲(chǔ)桶,范圍從簡(jiǎn)單但不靈活到復(fù)雜而強(qiáng)大,所有這些都是通過(guò)BlobStoreContext獲得的。 讓我們從最簡(jiǎn)單的開始。

2.1。 通過(guò)Map API上傳

jclouds與S3存儲(chǔ)桶進(jìn)行交互的最簡(jiǎn)單方法是將該存儲(chǔ)桶表示為Map。 該API是從上下文中獲取的:

InputStreamMap bucket = context.createInputStreamMap('bucketName');

然后,上傳一個(gè)簡(jiǎn)單HTML文件:

bucket.putString('index1.html', '<html><body>hello world1</body></html>');

InputStreamMap API公開了其他幾種PUT操作-文件和原始字節(jié)-單個(gè)和批量。 可以使用一個(gè)簡(jiǎn)單的集成測(cè)試作為示例:

@Test public void whenFileIsUploadedToS3WithMapApi_thenNoExceptions() {BlobStoreContext context =ContextBuilder.newBuilder('aws-s3').credentials(identity, credentials).buildView(AWSS3BlobStoreContext.class);InputStreamMap bucket = context.createInputStreamMap('bucketName');bucket.putString('index1.html', '<html><body>hello world1</body></html>');context.close(); }

2.2。 通過(guò)BlobMap上傳

使用簡(jiǎn)單的Map API很簡(jiǎn)單,但最終會(huì)受到限制-例如,無(wú)法傳遞有關(guān)要上傳內(nèi)容的元數(shù)據(jù)。 當(dāng)需要更大的靈活性和定制功能時(shí),通過(guò)Map將數(shù)據(jù)上傳到S3的這種簡(jiǎn)化方法已不再足夠。 我們將要看的下一個(gè)API是Blob Map API,它是從上下文中獲得的:

BlobMap bucket = context.createBlobMap('bucketName');

該API允許客戶端訪問(wèn)更多較低級(jí)別的詳細(xì)信息,例如Content – Length , Content-Type , Content-Encoding , eTag哈希等。 在存儲(chǔ)桶中上傳新內(nèi)容:

Blob blob = bucket.blobBuilder().name('index2.html').payload('<html><body>hello world2</body></html>').contentType('text/html').calculateMD5().build();

API還允許在創(chuàng)建請(qǐng)求上設(shè)置各種有效負(fù)載。 一個(gè)簡(jiǎn)單的集成測(cè)試,用于通過(guò)Blob Map API將基本HTML文件上傳到S3:

@Test public void whenFileIsUploadedToS3WithBlobMap_thenNoExceptions() throws IOException {BlobStoreContext context =ContextBuilder.newBuilder('aws-s3').credentials(identity, credentials).buildView(AWSS3BlobStoreContext.class);BlobMap bucket = context.createBlobMap('bucketName');Blob blob = bucket.blobBuilder().name('index2.html').payload('<html><body>hello world2</body></html>').contentType('text/html').calculateMD5().build();bucket.put(blob.getMetadata().getName(), blob);context.close(); }

2.3。 通過(guò)BlobStore上傳

以前的API無(wú)法使用分段上傳來(lái)上傳內(nèi)容-這使它們不適用于處理大文件。 我們將要研究的下一個(gè)API(同步BlobStore API)解決了此限制。 這是從上下文中獲得的:

BlobStore blobStore = context.getBlobStore();

要使用多部分支持并將文件上傳到S3:

Blob blob = blobStore.blobBuilder('index3.html').payload('<html><body>hello world3</body></html>').contentType('text/html').build(); blobStore.putBlob('bucketName', blob, PutOptions.Builder.multipart());

有效負(fù)載生成器與BlobMap API所使用的生成器相同,因此可以在此處指定有關(guān)blob的較低級(jí)元數(shù)據(jù)信息時(shí)具有相同的靈活性。 區(qū)別在于API的PUT操作支持的PutOptions –即多部分支持 。 現(xiàn)在,先前的集成測(cè)試已啟用多部分功能:

@Test public void whenFileIsUploadedToS3WithBlobStore_thenNoExceptions() {BlobStoreContext context =ContextBuilder.newBuilder('aws-s3').credentials(identity, credentials).buildView(AWSS3BlobStoreContext.class);BlobStore blobStore = context.getBlobStore();Blob blob = blobStore.blobBuilder('index3.html').payload('<html><body>hello world3</body></html>').contentType('text/html').build();blobStore.putBlob('bucketName', blob, PutOptions.Builder.multipart());context.close(); }

2.4。 通過(guò)AsyncBlobStore上傳

雖然以前的BlobStore API是同步的,但還有一個(gè)針對(duì)BlobStore 的異步API – AsyncBlobStore 。 該API同樣是從上下文中獲得的:

AsyncBlobStore blobStore = context.getAsyncBlobStore();

兩者之間的唯一區(qū)別是異步API為PUT異步操作返回了ListenableFuture :

Blob blob = blobStore.blobBuilder('index4.html')..payload('<html><body>hello world4</body></html>').build(); blobStore.putBlob('bucketName', blob)<strong>.get()</strong>;

顯示此操作的集成測(cè)試類似于同步操作:

@Test public void whenFileIsUploadedToS3WithBlobStore_thenNoExceptions() {BlobStoreContext context =ContextBuilder.newBuilder('aws-s3').credentials(identity, credentials).buildView(AWSS3BlobStoreContext.class);BlobStore blobStore = context.getBlobStore();Blob blob = blobStore.blobBuilder('index4.html').payload('<html><body>hello world4</body></html>').contentType('text/html').build();Future<String> putOp = blobStore.putBlob('bucketName', blob, PutOptions.Builder.multipart());putOp.get();context.close(); }

3.結(jié)論

在本文中,我們分析了jclouds庫(kù)提供的用于將內(nèi)容上傳到Amazon S3的四個(gè)API 。 這四個(gè)API是通用的 ,它們還可以與其他鍵值存儲(chǔ)服務(wù)(例如Microsoft Azure Storage)一起使用。 在下一篇文章中,我們將研究jclouds中可用的特定于Amazon的S3 API – AWSS3Client 。 我們將實(shí)現(xiàn)上傳大文件的操作,動(dòng)態(tài)地計(jì)算任何給定文件的最佳零件數(shù),并并行執(zhí)行所有零件的上傳。

參考:在j3s 庫(kù)中,從JCG合作伙伴 Eugen Paraschiv 的jclouds庫(kù) 上載到baeldung博客。

翻譯自: https://www.javacodegeeks.com/2013/04/upload-on-amazon-s3-with-the-jclouds-library.html

亞馬遜s3的使用方法

總結(jié)

以上是生活随笔為你收集整理的亚马逊s3的使用方法_使用jclouds库在Amazon S3上上传的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。